﻿(function (a) {
    a(function () {
        var c = a("#BodyContent").hasClass("prompt-domain");
        c && a("#Domain").valid({
            iff: a.cf.validation.domain
        });
        a("#Email").valid({
            iff: a.cf.validation.email
        });
        a("#EmailConfirm").valid({
            iff: function (b) {
                return b == a("#Email").val()
            }
        });
        a("#Username").valid({
            iff: function (a) {
                return 3 < a.length
            }
        });
        a("#Password").rateValue();
        a("#Password").valid({
            iff: function (b) {
                return a.cf.validation.hasValue(b) && 0 < a.cf.rating.passwordStrength(b)
            }
        });
        a("#PasswordConfirm").valid({
            iff: function (b) {
                return a.cf.validation.hasValue(b) && b == a("#Password").val()
            }
        });
        a("#Agree").valid({
            iff: function () {
                return a("#Agree").is(":checked")
            }
        });
        var d = new a.cf.Query({
            act: "user/signup",
            mapResponse: function (b) {
                "error" == b.result ? a.cf.notify(b.msg, a.cf.noteType.error) : location.href = b.redirect ? b.redirect.url : "/my-websites.html"
            }
        });
        a("#Submit").bind("click",
        function () {
            a(".form input").areValid() && (a.extend(d.data, {
                user_email: a("#Email").val(),
                user_email2: a("#EmailConfirm").val(),
                user_name: a("#Username").val(),
                user_pass: a("#Password").val(),
                user_pass2: a("#PasswordConfirm").val(),
                seed_domain: c ? a("#Domain").val() : "",
                invite_code: "",
                terms: "on" == a("#Agree").val() ? 1 : 0
            }), d.query())
        })
    })
})(jQuery);




(function (b) {
    b.cf = {
        logType: {
            debug: "[ D ]",
            warning: "[ W ]",
            error: "[ E ]"
        },
        logToConsole: !1,
        log: function (a, c) {
            if (!("logToConsole" in b.cf) || b.cf.logToConsole) {
                c = c ? c : b.cf.logType.debug;
                try {
                    console.log(c + " " + a)
                } catch (d) { }
            }
        },
        noteType: {
            alert: "alert",
            message: "message",
            warning: "warning",
            error: "error",
            status: {
                full: "status-full",
                compact: "status-compact"
            }
        },
        notify: function (a, c, d) {
            if (a) {
                var c = c ? c : b.cf.noteType.message,
                d = d ? -1 != d ? 1E3 * d : d : 1E4,
                e = b('<li class="note ' + c + '"><h1>' + c.toUpperCase() + '</h1><a href="javascript:void(0);" class="dismiss">Dismiss</a><p class="message">' + a + "</p></li>");
                b("#Notifications").prepend(e);
                e.hide().slideDown(400,
                function () {
                    -1 != d && setTimeout(function () {
                        e.slideUp(400,
                        function () {
                            e.remove()
                        })
                    },
                        d)
                });
                e.find("a.dismiss").click(function () {
                    e.slideUp(400,
                    function () {
                        e.remove()
                    });
                    return !1
                })
            }
        },
        notifyStatus: function (a) {
            if (a) {
                var a = b.extend({
                    full: "",
                    compact: "",
                    start: b.cf.noteType.status.full,
                    onDismiss: b.noop
                },
                a),
                c = b('<li class="note status ' + a.start + '"><p class="msg msg-full">' + a.full + '</p><p class="msg msg-compact">' + a.compact + '</p><a href="javascript:void(0);" class="dismiss">Dismiss</a></li>');
                b("#Notifications").prepend(c);
                c.hide().slideDown(400);
                c.find("a.dismiss, a.expand").click(function () {
                    b(this).hasClass("dismiss") ? (c.removeClass("status-full").addClass("status-compact"), a.onDismiss()) : b(this).hasClass("expand") && c.removeClass("status-compact").addClass("status-full");
                    return !1
                })
            }
        },
        clearNotifications: function () {
            var a = b("#Notifications > .note:not(.note.dying)");
            a.addClass("dying");
            a.fadeOut(400,
            function () {
                a.remove()
            })
        },
        mouseX: -1,
        mouseY: -1,
        buildOptions: function (a, c) {
            var d = b(a),
            e = "",
            f,
            g = function (a, b) {
                f = ' value="' + a + '"' + (a == c.selected ? ' selected="true" checked="true"' : "");
                e += "<option" + f + ">" + b + "</option>"
            };
            d.is(":not([multiple])") && c.placeholder && g("", c.placeholder);
            c.data && b.each(c.data, g);
            d.append(e)
        },
        modalStateEnabled: !1,
        loadModalDialog: function (a, c) {
            var c = b.extend({
                title: "Untitled Dialog",
                buttons: {
                    Okay: function () {
                        b("#ModalDialog").dialog("close")
                    }
                },
                modal: !0,
                position: "center",
                draggable: !1,
                resizable: !1,
                width: 500,
                maxHeight: 600,
                open: function () {
                    b(".ui-dialog:has(#ModalDialog)").hide().children().wrapAll(b('<div class="inner"></div>'));
                    b(".ui-widget-overlay").hide().fadeIn(600)
                },
                beforeClose: function (a) {
                    var e = this;
                    a.preventDefault();
                    b(".ui-dialog:has(#ModalDialog)").css({
                        marginTop: "0",
                        opacity: "1"
                    }).show().animate({
                        marginTop: "-20px",
                        opacity: "0"
                    },
                    400, "easeOutExpo",
                    function () {
                        b(".ui-widget-overlay").fadeOut(200,
                        function () {
                            b.cf.modalStateEnabled = !1;
                            b("#ModalDialog").dialog("destroy").remove();
                            b("#ModalComponent").remove();
                            c.close && c.close.call(e, a)
                        })
                    })
                },
                close: function (a) {
                    a.preventDefault()
                },
                contentReady: function () { }
            },
            c),
            a = b.extend({
                url: "/ajax/modal-dialog.html",
                type: "default"
            },
            a),
            d = function () {
                b.cf.notify('There was an error launching a modal dialog. Please try again, and if the problem persists, contact <a href="mailto:support@cloudflare.com">support@cloudflare.com</a>!', b.cf.noteType.error)
            };
            b.each(c.buttons,
            function (a, e) {
                var d = b.isFunction(e),
                j = (d ? e : e.click) || b.noop,
                i = function (c) {
                    var i = b(c.target),
                    i = i.is("button") ? i : i.closest("button");
                    if (i.hasClass("disabled")) return !1;
                    i.addClass("disabled submitting");
                    j.apply(this, arguments);
                    b("#ModalComponent").triggerHandler("modalbutton", {
                        name: d ? a : e.name
                    })
                };
                c.buttons[a] = d ? i : {
                    text: e.text,
                    click: i
                }
            });
            if (!b.cf.modalStateEnabled) {
                b.cf.modalStateEnabled = !0;
                var e = a.url;
                delete a.url;
                b.ajax({
                    url: e,
                    dataType: "html",
                    type: "POST",
                    data: a,
                    error: d,
                    success: function (a) {
                        try {
                            b("#HiddenContent").append(a)
                        } catch (e) {
                            b.cf.log("There was an error creating a DOM node from the retrieved HTML!", b.cf.logType.error),
                            d()
                        }
                        b("#ModalComponent").bind("contentready",
                        function (a) {
                            b("#ModalDialog").dialog("option", "position", "center");
                            b(".ui-dialog:has(#ModalDialog)").css({
                                marginTop: "40px",
                                opacity: "0"
                            }).show().animate({
                                marginTop: "0",
                                opacity: "1"
                            },
                            400, "easeOutExpo");
                            c.contentReady && c.contentReady(a)
                        }).bind("modalclose",
                        function () {
                            b("#ModalDialog").dialog("close")
                        });
                        b("#ModalDialog").dialog(c);
                        b("#ModalComponent").triggerHandler("modalready")
                    }
                })
            }
        },
        withModalConfirmation: function (a) {
            var c = b.Deferred(),
            d = !1,
            e = function () {
                b("#ModalDialog").dialog("close")
            },
            a = b.extend({
                content: "",
                title: "",
                width: 800,
                submitLabel: "Confirm",
                cancelLabel: ""
            },
            a);
            b.cf.loadModalDialog({
                content: a.content
            },
            {
                title: a.title,
                width: a.width,
                dialogClass: "cf-dialog-one-button",
                buttons: [{
                    text: a.submitLabel,
                    click: function () {
                        d = !0;
                        c.then(e).resolve()
                    }
                },
                {
                    text: a.cancelLabel,
                    click: function () {
                        d || (e(), c.reject())
                    }
                }],
                close: function () {
                    d || c.reject()
                }
            });
            return c
        },
        mapWithDelays: function (a, c, d) {
            var d = d || 0,
            e = b.map(a,
            function () {
                return b.Deferred()
            }),
            f = a.length - 1,
            g = function () {
                doAddZone(a[f]);
                e[f].resolve();
                f-- && setTimeout(g, d)
            };
            g();
            return e
        },
        proxyNoisyDelay: function (a, c, d) {
            var e = b.Deferred(),
            f,
            d = d || c || [0, 0],
            d = b.isArray(d) ? d : [d, d];
            f = d[0];
            d = d[1] - d[0];
            f = Math.random() * d + f;
            setTimeout(function () {
                a.call(c);
                e.resolve()
            },
            f);
            return e
        },
        trackEvent: function (a, c, d) {
            var e = "";
            window._gaq && (b.cf.data.spoofing && (e = "[Internal] "), _gaq.push(["_trackEvent", e + a, c, d]))
        },
        trackPageView: function (a, b) {
            window._gaq && _gaq.push(["_trackPageview", a, b])
        },
        atok: function () {
            return b.cf.data && b.cf.data.atok
        }
    };
    b.extend(b.fn, {
        tooltip: function (a) {
            a = b.extend({
                backgroundColor: "#3c5466",
                textCSS: {
                    color: "#ffffff"
                },
                text: null,
                offset: 10,
                delay: 500,
                width: null,
                showOn: "mouseenter",
                hideOn: "mouseleave",
                forceMouse: !1,
                autoPointer: !0,
                align: "center",
                shadow: !0,
                attributes: ["tooltip", "alt", "value", "href", "rel"],
                customClass: null,
                customContent: function () { }
            },
            a);
            this.each(function (c, d) {
                var e = b(d),
                f;
                if (a.text) f = a.text;
                else a: {
                    for (f = 0; f < a.attributes.length; f++) if (void 0 != e.attr(a.attributes[f])) {
                        f = e.attr(a.attributes[f]);
                        break a
                    }
                    f = void 0
                }
                var g = f,
                h, j, i, l, k, m = !1;
                e.data("tooltip", {
                    showOn: a.showOn,
                    hideOn: a.hideOn,
                    showTip: function () {
                        m || (l = setTimeout(function () {
                            if (b.contains(document, e.get(0))) {
                                h = b('<div class="tooltip"></div>').appendTo("body").css({
                                    width: a.width ? a.width + "px" : null,
                                    opacity: 0
                                }).hide();
                                a.shadow && h.addClass("shadow");
                                a.extraClass && h.addClass(a.extraClass);
                                b('<div class="tip"><p>' + g + "</p></div>").appendTo(h).css(b.extend({
                                    background: a.backgroundColor
                                },
                                a.textCSS));
                                a.customContent && (k = b.isFunction(a.customContent) ? a.customContent(h.children().first()) : a.customContent, k instanceof jQuery && k.appendTo(h.children().first()));
                                if (a.forceMouse) j = b.cf.mouseX - h.outerWidth() / 2,
                                i = b.cf.mouseY + a.offset;
                                else switch (i = e.offset().top + (e.outerHeight() + a.offset), a.align) {
                                    default:
                                    case "center":
                                        j = e.offset().left + (e.outerWidth() / 2 - h.outerWidth() / 2);
                                        break;
                                    case "left":
                                        j = e.offset().left;
                                        break;
                                    case "right":
                                        j = e.offset().left + e.outerWidth() - h.outerWidth();
                                        break;
                                    case "right-margin-top":
                                        j = e.offset().left + e.outerWidth(),
                                        i = e.offset().top
                                }
                                if (!b.browser.msie) {
                                    var c;
                                    if (a.autoPointer) c = b.cf.mouseX && b.cf.mouseX < j + 8 ? 8 : b.cf.mouseX > j + h.outerWidth() - 16 ? h.outerWidth() - 16 : b.cf.mouseX ? b.cf.mouseX - j - 5 : h.outerWidth() / 2 - 4;
                                    else switch (a.align) {
                                        default:
                                        case "center":
                                            c = h.outerWidth() / 2 - 4;
                                            break;
                                        case "left":
                                            c = 8;
                                            break;
                                        case "right":
                                            c = h.outerWidth() - 16
                                    }
                                    b('<div class="pointer"></div>').prependTo(h).css({
                                        left: c + "px",
                                        background: a.backgroundColor
                                    })
                                }
                                h.css({
                                    top: i + 10 + "px",
                                    left: j + "px"
                                }).show().animate({
                                    opacity: 1,
                                    top: i + "px"
                                },
                                200);
                                k && k.trigger("visible")
                            } else b.cf.log("Tooltip's designated target was not attached to the DOM! Aborting..", b.cf.logType.warning),
                            e.mouseleave()
                        },
                        a.delay), m = !0)
                    },
                    hideTip: function () {
                        m && (l && clearTimeout(l), null != h && h.stop().animate({
                            opacity: 0,
                            top: i - 10 + "px"
                        },
                        200,
                        function () {
                            h.remove();
                            h = null;
                            a.forceMouse && e.clearTooltip()
                        }), m = !1)
                    }
                });
                a.forceMouse ? e.bind(e.data("tooltip").hideOn + " remove", e.data("tooltip").hideTip).data("tooltip").showTip() : e.bind(e.data("tooltip").showOn, e.data("tooltip").showTip).bind(e.data("tooltip").hideOn + " remove", e.data("tooltip").hideTip)
            });
            return this
        },
        clearTooltip: function () {
            this.each(function (a, c) {
                var d = b(c);
                d.data("tooltip") && (d.data("tooltip").hideTip(), d.unbind(d.data("tooltip").showOn, d.data("tooltip").showTip).unbind(d.data("tooltip").hideOn + " remove", d.data("tooltip").hideTip))
            });
            return this
        },
        placeholder: function () { },
        copyToClipboard: function (a) {
            a = b.extend({
                caption: "Press 'control/command + c' to copy:",
                copyTarget: null,
                copyText: null,
                attributes: ["clipboard", "alt", "value", "href", "rel"],
                tooltipOptions: {}
            },
            a);
            this.each(function () {
                var c = b(this),
                d = !1;
                if (!a.copyText) {
                    var e = a.copyTarget || c;
                    b.each(a.attributes,
                    function (b, c) {
                        if (e.attr(c)) return a.copyText = e.attr(c),
                        !1
                    })
                }
                d = a.copyText || "Undefined";
                c.tooltip(b.extend({
                    delay: 150
                },
                a.tooltipOptions, {
                    text: a.caption,
                    customContent: function () {
                        return b('<input class="clipboard" type="text" value="' + d + '" />').bind("visible",
                        function () {
                            this.select()
                        })
                    }
                }))
            })
        },
        truncate: function () {
            return this.filter(function (a, c) {
                var d = b(c),
                e = d.attr("style"),
                f = d.css({
                    display: "inline-block",
                    whiteSpace: "nowrap",
                    overflow: "hidden"
                }).width(),
                g = d.css({
                    width: "auto"
                }).width();
                e ? d.attr("style", e) : (d.attr("style", ""), d.removeAttr("style"));
                return f < g
            }).map(function (a, c) {
                var d = b(c),
                e = d.is(".abbreviatable") ? d : d.find(".abbreviatable");
                e.length || (e = d);
                d.addClass("truncated");
                e.addClass("abbreviated").attr("title", e.text())
            })
        },
        removeClassRegExp: function (a) {
            return this.replaceClassRegExp(a, "")
        },
        replaceClassRegExp: function (a, b) {
            return this.replaceAttr("class", a, b)
        },
        replaceAttr: function (a, b, d) {
            b = RegExp("(^| ) *" + b + " *", "g");
            return this.attr(a, this.attr(a).replace(b, " ") + " " + d)
        }
    });
    b(document).bind("mousemove",
    function (a) {
        b.cf.mouseX = a.pageX;
        b.cf.mouseY = a.pageY
    })
})(jQuery); (function (b) {
    b.extend(b.cf, {
        clientType: {
            ie: "Internet Explorer",
            gecko: "Gecko",
            webkit: "Webkit",
            opera: "Opera",
            unknown: "Unknown"
        },
        resolveClient: function () {
            return b.browser.msie ? b.cf.clientType.ie : b.browser.mozilla ? b.cf.clientType.gecko : b.browser.webkit || b.browser.safari ? b.cf.clientType.webkit : b.browser.opera ? b.cf.clientType.opera : b.cf.clientType.unknown
        },
        resolveClientUpgradeURL: function () {
            switch (b.cf.resolveClient()) {
                case b.cf.clientType.ie:
                    return "http://www.microsoft.com/windows/internet-explorer/default.aspx";
                default:
                case b.cf.clientType.mozilla:
                    return "http://www.mozilla.com/en-US/firefox/personal.html";
                case b.cf.clientType.opera:
                    return "http://www.opera.com/browser/";
                case b.cf.clientType.webkit:
                    return "http://www.google.com/chrome"
            }
        },
        clientStatus: {
            unknown: "Unknown",
            standard: "Standard",
            deprecated: "Deprecated",
            obsolete: "Obsolete"
        },
        resolveClientStatus: function () {
            var a = /\d+/,
            c = b.map(b.browser.version.split("."),
            function (b) {
                return (b = a.exec(b)) && b[0]
            });
            switch (b.cf.resolveClient()) {
                case b.cf.clientType.ie:
                    var d = parseInt(c[0]);
                    return 7 < d ? b.cf.clientStatus.standard : 6 < d ? b.cf.clientStatus.deprecated : b.cf.clientStatus.obsolete;
                case b.cf.clientType.gecko:
                    var d = parseInt(c[0]),
                    e = parseInt(c[1]) || 0,
                    c = parseInt(c[2]) || 0;
                    return 0 < d ? 7 < e ? 8 < e && 0 < c ? b.cf.clientStatus.standard : b.cf.clientStatus.deprecated : 1 < d ? b.cf.clientStatus.standard : b.cf.clientStatus.obsolete : b.cf.clientStatus.obsolete;
                case b.cf.clientType.webkit:
                    return d = parseInt(c[0]),
                    500 < d ? b.cf.clientStatus.standard : 400 < d ? b.cf.clientStatus.deprecated : b.cf.clientStatus.obsolete;
                case b.cf.clientType.opera:
                    return d = parseInt(c[0]),
                    9 < d ? b.cf.clientStatus.standard : 8 < d ? b.cf.clientStatus.deprecated : b.cf.clientStatus.obsolete
            }
            return b.cf.clientStatus.unknown
        },
        clientTier: {
            one: 1,
            two: 2,
            three: 3,
            four: 4,
            unknown: -1
        },
        resolveClientTier: function () {
            var a = b.cf.resolveClient(),
            c = b.cf.resolveClientStatus();
            return c == b.cf.clientStatus.standard && (a == b.cf.clientType.webkit || a == b.cf.clientType.gecko || a == b.cf.clientType.opera) ? b.cf.clientTier.one : c == b.cf.clientStatus.deprecated && (a == b.cf.clientType.gecko || a == b.cf.clientType.webkit) || c == b.cf.clientStatus.standard && a == b.cf.clientType.ie ? b.cf.clientTier.two : c == b.cf.clientStatus.deprecated && (a == b.cf.clientType.ie || a == b.cf.clientType.opera || a == b.cf.clientType.unknown) || c == b.cf.clientStatus.obsolete && (a == b.cf.clientType.gecko || a == b.cf.clientType.webkit) ? b.cf.clientTier.three : c == b.cf.clientStatus.obsolete ? b.cf.clientTier.four : b.cf.clientTier.unknown
        },
        clientValue: function (a) {
            var a = b.extend({
                key: null,
                value: null,
                domain: null,
                path: "/",
                expires: 1,
                secure: !0
            },
            a),
            c = null;
            if (null != a.key) if (a.value) document.cookie = a.key + "=" + encodeURIComponent(a.value) + "; expires=" + (new Date((new Date).getTime() + 864E5 * a.expires)).toUTCString() + "; path=" + a.path + (null != a.domain ? "; domain=" + a.domain : "") + (a.secure ? "; secure" : "");
            else if (document.cookie && "" != document.cookie) {
                var d = document.cookie.split(";");
                b.each(d,
                function (e, d) {
                    if (b.trim(d).substr(0, a.key.length + 1) == a.key + "=") return c = decodeURIComponent(b.trim(d).substr(a.key.length + 1)),
                    !1
                })
            }
            return c
        },
        promptChromeFrame: function () {
            try {
                b.getScript("http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js",
                function () {
                    b("body").prepend('<div id="ChromeFrameInstaller"><div class="background"></div><iframe id="ChromeFrameInstallerFrame"></iframe></div>');
                    b("div#ChromeFrameInstaller > div.background").css("opacity", "0.5");
                    b("html").css("overflow", "hidden");
                    CFInstall.check({
                        node: "ChromeFrameInstallerFrame"
                    });
                    b.cf.clientValue({
                        key: "ChromeFramePrompted",
                        value: 1
                    })
                })
            } catch (a) {
                b.cf.log("Can't load CFInstall!", b.cf.logType.error)
            }
        },
        invalidateClient: function () {
            b("a.chromeFrameInstallLauncher").live("click",
            function () {
                b.cf.clearNotifications();
                b.cf.promptChromeFrame()
            });
            switch (b.cf.resolveClientTier()) {
                case b.cf.clientTier.three:
                    null == b.cf.clientValue({
                        key: "ChromeFramePrompted"
                    }) && b.cf.notify('Your current browser may not display CloudFlare correctly. We highly recommend that you <a href="' + b.cf.resolveClientUpgradeURL() + '" target="_blank">upgrade your browser</a>' + (b.cf.resolveClient() == b.cf.clientType.ie ? ', or <a href="javascript:void(0);" class="chromeFrameInstallLauncher">install Chrome Frame</a>,' : "") + " before continuing!", b.cf.noteType.warning, 20);
                    break;
                case b.cf.clientTier.four:
                    b.cf.notify('Your current browser will not display CloudFlare correctly! Please <a href="' + b.cf.resolveClientUpgradeURL() + '" target="_blank">upgrade your browser</a>' + (b.cf.resolveClient() == b.cf.clientType.ie ? ', or <a href="javascript:void(0);" class="chromeFrameInstallLauncher">install Chrome Frame</a>,' : "") + " before continuing!", b.cf.noteType.error, -1)
            }
        }
    });
    b.cf.isMobile = /android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent || navigator.vendor || window.opera || "") || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test((navigator.userAgent || navigator.vendor || window.opera || "").substr(0, 4))
})(jQuery); (function (b) {
    b.extend(b.expr[":"], {
        external: function (a) {
            return !0 === (a.host && a.host !== location.host)
        },
        email: function (a) {
            return a.href && "mailto:" === a.href.substr(0, 7)
        }
    });
    b.fn.trackEvent = function (a) {
        var a = b.extend({
            events: "click",
            bind: "bind",
            category: this.nodeName,
            action: null,
            label: null,
            value: 1
        },
        a),
        c = this;
        a.events = b.isArray(a.events) ? a.events : [a.events];
        b.each(a.events,
        function (d, e) {
            var f = b.extend({},
            a);
            c[f.bind](e,
            function (a) {
                f.action = f.action ? f.action : a;
                f.label = f.label ? f.label : c.is("a") && "javascript:void(0);" != c.attr("href") ? c.attr("href") : c.is("input") ? c.val() : c.attr("id") ? c.attr("id") : c.text();
                try {
                    _gaq.push(["_trackEvent", f.category, f.action, f.label, f.value])
                } catch (e) {
                    b.cf.log("Google Analytics appears to be missing! If you are not browsing offline, report this issue!", b.cf.logType.error)
                }
            })
        })
    }
})(jQuery); (function (b) {
    b.extend(b.cf, {
        countryHash: {
            unicodeCountry: {
                AF: "Afghanistan",
                AX: "Aland Islands",
                AL: "Albania",
                DZ: "Algeria",
                AS: "American Samoa",
                AD: "Andorra",
                AO: "Angola",
                AI: "Anguilla",
                AQ: "Antarctica",
                AG: "Antigua and Barbuda",
                AR: "Argentina",
                AM: "Armenia",
                AW: "Aruba",
                AU: "Australia",
                AT: "Austria",
                AZ: "Azerbaijan",
                BS: "Bahamas",
                BH: "Bahrain",
                BD: "Bangladesh",
                BB: "Barbados",
                BY: "Belarus",
                BE: "Belgium",
                BZ: "Belize",
                BJ: "Benin",
                BM: "Bermuda",
                BT: "Bhutan",
                BO: "Bolivia, Plurinational State of",
                BA: "Bosnia and Herzegovina",
                BW: "Botswana",
                BV: "Bouvet Island",
                BR: "Brazil",
                IO: "British Indian Ocean Territory",
                BN: "Brunei Darussalam",
                BG: "Bulgaria",
                BF: "Burkina Faso",
                BI: "Burundi",
                KH: "Cambodia",
                CM: "Cameroon",
                CA: "Canada",
                CV: "Cape Verde",
                KY: "Cayman Islands",
                CF: "Central African Republic",
                TD: "Chad",
                CL: "Chile",
                CN: "China",
                CX: "Christmas Island",
                CC: "Cocos (Keeling) Islands",
                CO: "Colombia",
                KM: "Comoros",
                CG: "Congo",
                CD: "Congo, the Democratic Republic of the",
                CK: "Cook Islands",
                CR: "Costa Rica",
                CI: "Cote d'Ivoire",
                HR: "Croatia",
                CU: "Cuba",
                CY: "Cyprus",
                CZ: "Czech Republic",
                DK: "Denmark",
                DJ: "Djibouti",
                DM: "Dominica",
                DO: "Dominican Republic",
                EC: "Ecuador",
                EG: "Egypt",
                SV: "El Salvador",
                GQ: "Equatorial Guinea",
                ER: "Eritrea",
                EE: "Estonia",
                ET: "Ethiopia",
                FK: "Falkland Islands (Malvinas)",
                FO: "Faroe Islands",
                FJ: "Fiji",
                FI: "Finland",
                FR: "France",
                GF: "French Guiana",
                PF: "French Polynesia",
                TF: "French Southern Territories",
                GA: "Gabon",
                GM: "Gambia",
                GE: "Georgia",
                DE: "Germany",
                GH: "Ghana",
                GI: "Gibraltar",
                GR: "Greece",
                GL: "Greenland",
                GD: "Grenada",
                GP: "Guadeloupe",
                GU: "Guam",
                GT: "Guatemala",
                GG: "Guernsey",
                GN: "Guinea",
                GW: "Guinea-Bissau",
                GY: "Guyana",
                HT: "Haiti",
                HM: "Heard Island and McDonald Islands",
                VA: "Holy See (Vatican City State)",
                HN: "Honduras",
                HK: "Hong Kong",
                HU: "Hungary",
                IS: "Iceland",
                IN: "India",
                ID: "Indonesia",
                IR: "Iran, Islamic Republic of",
                IQ: "Iraq",
                IE: "Ireland",
                IM: "Isle of Man",
                IL: "Israel",
                IT: "Italy",
                JM: "Jamaica",
                JP: "Japan",
                JE: "Jersey",
                JO: "Jordan",
                KZ: "Kazakhstan",
                KE: "Kenya",
                KI: "Kiribati",
                KP: "Korea, Democratic People's Republic of",
                KR: "Korea, Republic of",
                KW: "Kuwait",
                KG: "Kyrgyzstan",
                LA: "Lao People's Democratic Republic",
                LV: "Latvia",
                LB: "Lebanon",
                LS: "Lesotho",
                LR: "Liberia",
                LY: "Libya",
                LI: "Liechtenstein",
                LT: "Lithuania",
                LU: "Luxembourg",
                MO: "Macao",
                MK: "Macedonia, the former Yugoslav Republic of",
                MG: "Madagascar",
                MW: "Malawi",
                MY: "Malaysia",
                MV: "Maldives",
                ML: "Mali",
                MT: "Malta",
                MH: "Marshall Islands",
                MQ: "Martinique",
                MR: "Mauritania",
                MU: "Mauritius",
                YT: "Mayotte",
                MX: "Mexico",
                FM: "Micronesia, Federated States of",
                MD: "Moldova, Republic of",
                MC: "Monaco",
                MN: "Mongolia",
                ME: "Montenegro",
                MS: "Montserrat",
                MA: "Morocco",
                MZ: "Mozambique",
                MM: "Myanmar",
                NA: "Namibia",
                NR: "Nauru",
                NP: "Nepal",
                NL: "Netherlands",
                AN: "Netherlands Antilles",
                NC: "New Caledonia",
                NZ: "New Zealand",
                NI: "Nicaragua",
                NE: "Niger",
                NG: "Nigeria",
                NU: "Niue",
                NF: "Norfolk Island",
                MP: "Northern Mariana Islands",
                NO: "Norway",
                OM: "Oman",
                PK: "Pakistan",
                PW: "Palau",
                PS: "Palestinian Territory, Occupied",
                PA: "Panama",
                PG: "Papua New Guinea",
                PY: "Paraguay",
                PE: "Peru",
                PH: "Philippines",
                PN: "Pitcairn",
                PL: "Poland",
                PT: "Portugal",
                PR: "Puerto Rico",
                QA: "Qatar",
                RE: "Reunion",
                RO: "Romania",
                RU: "Russian Federation",
                RW: "Rwanda",
                BL: "Saint Barthelemy",
                SH: "Saint Helena, Ascension and Tristan da Cunha",
                KN: "Saint Kitts and Nevis",
                LC: "Saint Lucia",
                MF: "Saint Martin (French part)",
                PM: "Saint Pierre and Miquelon",
                VC: "Saint Vincent and the Grenadines",
                WS: "Samoa",
                SM: "San Marino",
                ST: "Sao Tome and Principe",
                SA: "Saudi Arabia",
                SN: "Senegal",
                RS: "Serbia",
                SC: "Seychelles",
                SL: "Sierra Leone",
                SG: "Singapore",
                SK: "Slovakia",
                SI: "Slovenia",
                SB: "Solomon Islands",
                SO: "Somalia",
                ZA: "South Africa",
                GS: "South Georgia and the South Sandwich Islands",
                ES: "Spain",
                LK: "Sri Lanka",
                SD: "Sudan",
                SR: "Suriname",
                SJ: "Svalbard and Jan Mayen",
                SZ: "Swaziland",
                SE: "Sweden",
                CH: "Switzerland",
                SY: "Syrian Arab Republic",
                TW: "Taiwan",
                TJ: "Tajikistan",
                TZ: "Tanzania, United Republic of",
                TH: "Thailand",
                TL: "Timor-Leste",
                TG: "Togo",
                TK: "Tokelau",
                TO: "Tonga",
                TT: "Trinidad and Tobago",
                TN: "Tunisia",
                TR: "Turkey",
                TM: "Turkmenistan",
                TC: "Turks and Caicos Islands",
                TV: "Tuvalu",
                UG: "Uganda",
                UA: "Ukraine",
                AE: "United Arab Emirates",
                GB: "United Kingdom",
                US: "United States",
                UM: "United States Minor Outlying Islands",
                UY: "Uruguay",
                UZ: "Uzbekistan",
                VU: "Vanuatu",
                VE: "Venezuela, Bolivarian Republic of",
                VN: "Viet Nam",
                VG: "Virgin Islands, British",
                VI: "Virgin Islands, U.S.",
                WF: "Wallis and Futuna",
                EH: "Western Sahara",
                YE: "Yemen",
                ZM: "Zambia",
                ZW: "Zimbabwe"
            },
            countryUnicode: {
                afghanistan: "AF",
                "aland islands": "AX",
                albania: "AL",
                algeria: "DZ",
                "american samoa": "AS",
                andorra: "AD",
                angola: "AO",
                anguilla: "AI",
                antarctica: "AQ",
                "antigua and barbuda": "AG",
                argentina: "AR",
                armenia: "AM",
                aruba: "AW",
                australia: "AU",
                austria: "AT",
                azerbaijan: "AZ",
                bahamas: "BS",
                bahrain: "BH",
                bangladesh: "BD",
                barbados: "BB",
                belarus: "BY",
                belgium: "BE",
                belize: "BZ",
                benin: "BJ",
                bermuda: "BM",
                bhutan: "BT",
                "bolivia, plurinational state of": "BO",
                "bosnia and herzegovina": "BA",
                botswana: "BW",
                "bouvet island": "BV",
                brazil: "BR",
                "british indian ocean territory": "IO",
                "brunei darussalam": "BN",
                bulgaria: "BG",
                "burkina faso": "BF",
                burundi: "BI",
                cambodia: "KH",
                cameroon: "CM",
                canada: "CA",
                "cape verde": "CV",
                "cayman islands": "KY",
                "central african republic": "CF",
                chad: "TD",
                chile: "CL",
                china: "CN",
                "christmas island": "CX",
                "cocos (keeling) islands": "CC",
                colombia: "CO",
                comoros: "KM",
                congo: "CG",
                "congo, the democratic republic of the": "CD",
                "cook islands": "CK",
                "costa rica": "CR",
                "cote d'ivoire": "CI",
                croatia: "HR",
                cuba: "CU",
                cyprus: "CY",
                "czech republic": "CZ",
                denmark: "DK",
                djibouti: "DJ",
                dominica: "DM",
                "dominican republic": "DO",
                ecuador: "EC",
                egypt: "EG",
                "el salvador": "SV",
                "equatorial guinea": "GQ",
                eritrea: "ER",
                estonia: "EE",
                ethiopia: "ET",
                "falkland islands (malvinas)": "FK",
                "faroe islands": "FO",
                fiji: "FJ",
                finland: "FI",
                france: "FR",
                "french guiana": "GF",
                "french polynesia": "PF",
                "french southern territories": "TF",
                gabon: "GA",
                gambia: "GM",
                georgia: "GE",
                germany: "DE",
                ghana: "GH",
                gibraltar: "GI",
                greece: "GR",
                greenland: "GL",
                grenada: "GD",
                guadeloupe: "GP",
                guam: "GU",
                guatemala: "GT",
                guernsey: "GG",
                guinea: "GN",
                "guinea-bissau": "GW",
                guyana: "GY",
                haiti: "HT",
                "heard island and mcdonald islands": "HM",
                "holy see (vatican city state)": "VA",
                honduras: "HN",
                "hong kong": "HK",
                hungary: "HU",
                iceland: "IS",
                india: "IN",
                indonesia: "ID",
                "iran, islamic republic of": "IR",
                iraq: "IQ",
                ireland: "IE",
                "isle of man": "IM",
                israel: "IL",
                italy: "IT",
                jamaica: "JM",
                japan: "JP",
                jersey: "JE",
                jordan: "JO",
                kazakhstan: "KZ",
                kenya: "KE",
                kiribati: "KI",
                "korea, democratic people's republic of": "KP",
                "korea, republic of": "KR",
                kuwait: "KW",
                kyrgyzstan: "KG",
                "lao people's democratic republic": "LA",
                latvia: "LV",
                lebanon: "LB",
                lesotho: "LS",
                liberia: "LR",
                libya: "LY",
                liechtenstein: "LI",
                lithuania: "LT",
                luxembourg: "LU",
                macao: "MO",
                "macedonia, the former yugoslav republic of": "MK",
                madagascar: "MG",
                malawi: "MW",
                malaysia: "MY",
                maldives: "MV",
                mali: "ML",
                malta: "MT",
                "marshall islands": "MH",
                martinique: "MQ",
                mauritania: "MR",
                mauritius: "MU",
                mayotte: "YT",
                mexico: "MX",
                "micronesia, federated states of": "FM",
                "moldova, republic of": "MD",
                monaco: "MC",
                mongolia: "MN",
                montenegro: "ME",
                montserrat: "MS",
                morocco: "MA",
                mozambique: "MZ",
                myanmar: "MM",
                namibia: "NA",
                nauru: "NR",
                nepal: "NP",
                netherlands: "NL",
                "netherlands antilles": "AN",
                "new caledonia": "NC",
                "new zealand": "NZ",
                nicaragua: "NI",
                niger: "NE",
                nigeria: "NG",
                niue: "NU",
                "norfolk island": "NF",
                "northern mariana islands": "MP",
                norway: "NO",
                oman: "OM",
                pakistan: "PK",
                palau: "PW",
                "palestinian territory, occupied": "PS",
                panama: "PA",
                "papua new guinea": "PG",
                paraguay: "PY",
                peru: "PE",
                philippines: "PH",
                pitcairn: "PN",
                poland: "PL",
                portugal: "PT",
                "puerto rico": "PR",
                qatar: "QA",
                reunion: "RE",
                romania: "RO",
                "russian federation": "RU",
                rwanda: "RW",
                "saint barthelemy": "BL",
                "saint helena, ascension and tristan da cunha": "SH",
                "saint kitts and nevis": "KN",
                "saint lucia": "LC",
                "saint martin (french part)": "MF",
                "saint pierre and miquelon": "PM",
                "saint vincent and the grenadines": "VC",
                samoa: "WS",
                "san marino": "SM",
                "sao tome and principe": "ST",
                "saudi arabia": "SA",
                senegal: "SN",
                serbia: "RS",
                seychelles: "SC",
                "sierra leone": "SL",
                singapore: "SG",
                slovakia: "SK",
                slovenia: "SI",
                "solomon islands": "SB",
                somalia: "SO",
                "south africa": "ZA",
                "south georgia and the south sandwich islands": "GS",
                spain: "ES",
                "sri lanka": "LK",
                sudan: "SD",
                suriname: "SR",
                "svalbard and jan mayen": "SJ",
                swaziland: "SZ",
                sweden: "SE",
                switzerland: "CH",
                "syrian arab republic": "SY",
                taiwan: "TW",
                tajikistan: "TJ",
                "tanzania, united republic of": "TZ",
                thailand: "TH",
                "timor-leste": "TL",
                togo: "TG",
                tokelau: "TK",
                tonga: "TO",
                "trinidad and tobago": "TT",
                tunisia: "TN",
                turkey: "TR",
                turkmenistan: "TM",
                "turks and caicos islands": "TC",
                tuvalu: "TV",
                uganda: "UG",
                ukraine: "UA",
                "united arab emirates": "AE",
                "united kingdom": "GB",
                "united states": "US",
                "united states minor outlying islands": "UM",
                uruguay: "UY",
                uzbekistan: "UZ",
                vanuatu: "VU",
                "venezuela, bolivarian republic of": "VE",
                "viet nam": "VN",
                "virgin islands, british": "VG",
                "virgin islands, u.s.": "VI",
                "wallis and futuna": "WF",
                "western sahara": "EH",
                yemen: "YE",
                zambia: "ZM",
                zimbabwe: "ZW"
            },
            searchCountry: {
                a: "Afghanistan;Aland Islands;Albania;Algeria;American Samoa;Andorra;Angola;Anguilla;Antarctica;Antigua and Barbuda;Argentina;Armenia;Aruba;Australia;Austria;Azerbaijan".split(";"),
                af: ["Afghanistan"],
                afg: ["Afghanistan"],
                al: ["Aland Islands", "Albania", "Algeria"],
                ala: ["Aland Islands"],
                alb: ["Albania"],
                alg: ["Algeria"],
                am: ["American Samoa"],
                ame: ["American Samoa"],
                an: ["Andorra", "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda"],
                and: ["Andorra"],
                ang: ["Angola", "Anguilla"],
                ant: ["Antarctica", "Antigua and Barbuda"],
                ar: ["Argentina", "Armenia", "Aruba"],
                arg: ["Argentina"],
                arm: ["Armenia"],
                aru: ["Aruba"],
                au: ["Australia", "Austria"],
                aus: ["Australia", "Austria"],
                az: ["Azerbaijan"],
                aze: ["Azerbaijan"],
                b: "Bahamas;Bahrain;Bangladesh;Barbados;Belarus;Belgium;Belize;Benin;Bermuda;Bhutan;Bolivia, Plurinational State of;Bosnia and Herzegovina;Botswana;Bouvet Island;Brazil;British Indian Ocean Territory;Brunei Darussalam;Bulgaria;Burkina Faso;Burundi".split(";"),
                ba: ["Bahamas", "Bahrain", "Bangladesh", "Barbados"],
                bah: ["Bahamas", "Bahrain"],
                ban: ["Bangladesh"],
                bar: ["Barbados"],
                be: ["Belarus", "Belgium", "Belize", "Benin", "Bermuda"],
                bel: ["Belarus", "Belgium", "Belize"],
                ben: ["Benin"],
                ber: ["Bermuda"],
                bh: ["Bhutan"],
                bhu: ["Bhutan"],
                bo: ["Bolivia, Plurinational State of", "Bosnia and Herzegovina", "Botswana", "Bouvet Island"],
                bol: ["Bolivia, Plurinational State of"],
                bos: ["Bosnia and Herzegovina"],
                bot: ["Botswana"],
                bou: ["Bouvet Island"],
                br: ["Brazil", "British Indian Ocean Territory", "Brunei Darussalam"],
                bra: ["Brazil"],
                bri: ["British Indian Ocean Territory"],
                bru: ["Brunei Darussalam"],
                bu: ["Bulgaria", "Burkina Faso", "Burundi"],
                bul: ["Bulgaria"],
                bur: ["Burkina Faso", "Burundi"],
                c: "Cambodia;Cameroon;Canada;Cape Verde;Cayman Islands;Central African Republic;Chad;Chile;China;Christmas Island;Cocos (Keeling) Islands;Colombia;Comoros;Congo;Congo, the Democratic Republic of the;Cook Islands;Costa Rica;Cote d'Ivoire;Croatia;Cuba;Cyprus;Czech Republic".split(";"),
                ca: ["Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands"],
                cam: ["Cambodia", "Cameroon"],
                can: ["Canada"],
                cap: ["Cape Verde"],
                cay: ["Cayman Islands"],
                ce: ["Central African Republic"],
                cen: ["Central African Republic"],
                ch: ["Chad", "Chile", "China", "Christmas Island"],
                cha: ["Chad"],
                chi: ["Chile", "China"],
                chr: ["Christmas Island"],
                co: "Cocos (Keeling) Islands;Colombia;Comoros;Congo;Congo, the Democratic Republic of the;Cook Islands;Costa Rica;Cote d'Ivoire".split(";"),
                coc: ["Cocos (Keeling) Islands"],
                col: ["Colombia"],
                com: ["Comoros"],
                con: ["Congo", "Congo, the Democratic Republic of the"],
                coo: ["Cook Islands"],
                cos: ["Costa Rica"],
                cot: ["Cote d'Ivoire"],
                cr: ["Croatia"],
                cro: ["Croatia"],
                cu: ["Cuba"],
                cub: ["Cuba"],
                cy: ["Cyprus"],
                cyp: ["Cyprus"],
                cz: ["Czech Republic"],
                cze: ["Czech Republic"],
                d: ["Denmark", "Djibouti", "Dominica", "Dominican Republic"],
                de: ["Denmark"],
                den: ["Denmark"],
                dj: ["Djibouti"],
                dji: ["Djibouti"],
                "do": ["Dominica", "Dominican Republic"],
                dom: ["Dominica", "Dominican Republic"],
                e: "Ecuador;Egypt;El Salvador;Equatorial Guinea;Eritrea;Estonia;Ethiopia".split(";"),
                ec: ["Ecuador"],
                ecu: ["Ecuador"],
                eg: ["Egypt"],
                egy: ["Egypt"],
                el: ["El Salvador"],
                els: ["El Salvador"],
                eq: ["Equatorial Guinea"],
                equ: ["Equatorial Guinea"],
                er: ["Eritrea"],
                eri: ["Eritrea"],
                es: ["Estonia"],
                est: ["Estonia"],
                et: ["Ethiopia"],
                eth: ["Ethiopia"],
                f: "Falkland Islands (Malvinas);Faroe Islands;Fiji;Finland;France;French Guiana;French Polynesia;French Southern Territories".split(";"),
                fa: ["Falkland Islands (Malvinas)", "Faroe Islands"],
                fal: ["Falkland Islands (Malvinas)"],
                far: ["Faroe Islands"],
                fi: ["Fiji", "Finland"],
                fij: ["Fiji"],
                fin: ["Finland"],
                fr: ["France", "French Guiana", "French Polynesia", "French Southern Territories"],
                fra: ["France"],
                fre: ["French Guiana", "French Polynesia", "French Southern Territories"],
                g: "Gabon Gambia Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guernsey Guinea Guinea-Bissau Guyana".split(" "),
                ga: ["Gabon", "Gambia"],
                gab: ["Gabon"],
                gam: ["Gambia"],
                ge: ["Georgia", "Germany"],
                geo: ["Georgia"],
                ger: ["Germany"],
                gh: ["Ghana"],
                gha: ["Ghana"],
                gi: ["Gibraltar"],
                gib: ["Gibraltar"],
                gr: ["Greece", "Greenland", "Grenada"],
                gre: ["Greece", "Greenland", "Grenada"],
                gu: "Guadeloupe Guam Guatemala Guernsey Guinea Guinea-Bissau Guyana".split(" "),
                gua: ["Guadeloupe", "Guam", "Guatemala"],
                gue: ["Guernsey"],
                gui: ["Guinea", "Guinea-Bissau"],
                guy: ["Guyana"],
                h: "Haiti;Heard Island and McDonald Islands;Holy See (Vatican City State);Honduras;Hong Kong;Hungary".split(";"),
                ha: ["Haiti"],
                hai: ["Haiti"],
                he: ["Heard Island and McDonald Islands"],
                hea: ["Heard Island and McDonald Islands"],
                ho: ["Holy See (Vatican City State)", "Honduras", "Hong Kong"],
                hol: ["Holy See (Vatican City State)"],
                hon: ["Honduras", "Hong Kong"],
                hu: ["Hungary"],
                hun: ["Hungary"],
                i: "Iceland;India;Indonesia;Iran, Islamic Republic of;Iraq;Ireland;Isle of Man;Israel;Italy".split(";"),
                ic: ["Iceland"],
                ice: ["Iceland"],
                "in": ["India", "Indonesia"],
                ind: ["India", "Indonesia"],
                ir: ["Iran, Islamic Republic of", "Iraq", "Ireland"],
                ira: ["Iran, Islamic Republic of", "Iraq"],
                ire: ["Ireland"],
                is: ["Isle of Man", "Israel"],
                isl: ["Isle of Man"],
                isr: ["Israel"],
                it: ["Italy"],
                ita: ["Italy"],
                j: ["Jamaica", "Japan", "Jersey", "Jordan"],
                ja: ["Jamaica", "Japan"],
                jam: ["Jamaica"],
                jap: ["Japan"],
                je: ["Jersey"],
                jer: ["Jersey"],
                jo: ["Jordan"],
                jor: ["Jordan"],
                k: "Kazakhstan;Kenya;Kiribati;Korea, Democratic People's Republic of;Korea, Republic of;Kuwait;Kyrgyzstan".split(";"),
                ka: ["Kazakhstan"],
                kaz: ["Kazakhstan"],
                ke: ["Kenya"],
                ken: ["Kenya"],
                ki: ["Kiribati"],
                kir: ["Kiribati"],
                ko: ["Korea, Democratic People's Republic of", "Korea, Republic of"],
                kor: ["Korea, Democratic People's Republic of", "Korea, Republic of"],
                ku: ["Kuwait"],
                kuw: ["Kuwait"],
                ky: ["Kyrgyzstan"],
                kyr: ["Kyrgyzstan"],
                l: "Lao People's Democratic Republic;Latvia;Lebanon;Lesotho;Liberia;Libya;Liechtenstein;Lithuania;Luxembourg".split(";"),
                la: ["Lao People's Democratic Republic", "Latvia"],
                lao: ["Lao People's Democratic Republic"],
                lat: ["Latvia"],
                le: ["Lebanon", "Lesotho"],
                leb: ["Lebanon"],
                les: ["Lesotho"],
                li: ["Liberia", "Libya", "Liechtenstein", "Lithuania"],
                lib: ["Liberia", "Libya"],
                lie: ["Liechtenstein"],
                lit: ["Lithuania"],
                lu: ["Luxembourg"],
                lux: ["Luxembourg"],
                m: "Macao;Macedonia, the former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte;Mexico;Micronesia, Federated States of;Moldova, Republic of;Monaco;Mongolia;Montenegro;Montserrat;Morocco;Mozambique;Myanmar".split(";"),
                ma: "Macao;Macedonia, the former Yugoslav Republic of;Madagascar;Malawi;Malaysia;Maldives;Mali;Malta;Marshall Islands;Martinique;Mauritania;Mauritius;Mayotte".split(";"),
                mac: ["Macao", "Macedonia, the former Yugoslav Republic of"],
                mad: ["Madagascar"],
                mal: ["Malawi", "Malaysia", "Maldives", "Mali", "Malta"],
                mar: ["Marshall Islands", "Martinique"],
                mau: ["Mauritania", "Mauritius"],
                may: ["Mayotte"],
                me: ["Mexico"],
                mex: ["Mexico"],
                mi: ["Micronesia, Federated States of"],
                mic: ["Micronesia, Federated States of"],
                mo: "Moldova, Republic of;Monaco;Mongolia;Montenegro;Montserrat;Morocco;Mozambique".split(";"),
                mol: ["Moldova, Republic of"],
                mon: ["Monaco", "Mongolia", "Montenegro", "Montserrat"],
                mor: ["Morocco"],
                moz: ["Mozambique"],
                my: ["Myanmar"],
                mya: ["Myanmar"],
                n: "Namibia;Nauru;Nepal;Netherlands;Netherlands Antilles;New Caledonia;New Zealand;Nicaragua;Niger;Nigeria;Niue;Norfolk Island;Northern Mariana Islands;Norway".split(";"),
                na: ["Namibia", "Nauru"],
                nam: ["Namibia"],
                nau: ["Nauru"],
                ne: ["Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand"],
                nep: ["Nepal"],
                net: ["Netherlands", "Netherlands Antilles"],
                "new": ["New Caledonia", "New Zealand"],
                ni: ["Nicaragua", "Niger", "Nigeria", "Niue"],
                nic: ["Nicaragua"],
                nig: ["Niger", "Nigeria"],
                niu: ["Niue"],
                no: ["Norfolk Island", "Northern Mariana Islands", "Norway"],
                nor: ["Norfolk Island", "Northern Mariana Islands", "Norway"],
                o: ["Oman"],
                om: ["Oman"],
                oma: ["Oman"],
                p: "Pakistan;Palau;Palestinian Territory, Occupied;Panama;Papua New Guinea;Paraguay;Peru;Philippines;Pitcairn;Poland;Portugal;Puerto Rico".split(";"),
                pa: "Pakistan;Palau;Palestinian Territory, Occupied;Panama;Papua New Guinea;Paraguay".split(";"),
                pak: ["Pakistan"],
                pal: ["Palau", "Palestinian Territory, Occupied"],
                pan: ["Panama"],
                pap: ["Papua New Guinea"],
                par: ["Paraguay"],
                pe: ["Peru"],
                per: ["Peru"],
                ph: ["Philippines"],
                phi: ["Philippines"],
                pi: ["Pitcairn"],
                pit: ["Pitcairn"],
                po: ["Poland", "Portugal"],
                pol: ["Poland"],
                por: ["Portugal"],
                pu: ["Puerto Rico"],
                pue: ["Puerto Rico"],
                q: ["Qatar"],
                qa: ["Qatar"],
                qat: ["Qatar"],
                r: ["Reunion", "Romania", "Russian Federation", "Rwanda"],
                re: ["Reunion"],
                reu: ["Reunion"],
                ro: ["Romania"],
                rom: ["Romania"],
                ru: ["Russian Federation"],
                rus: ["Russian Federation"],
                rw: ["Rwanda"],
                rwa: ["Rwanda"],
                s: "Saint Barthelemy;Saint Helena, Ascension and Tristan da Cunha;Saint Kitts and Nevis;Saint Lucia;Saint Martin (French part);Saint Pierre and Miquelon;Saint Vincent and the Grenadines;Samoa;San Marino;Sao Tome and Principe;Saudi Arabia;Senegal;Serbia;Seychelles;Sierra Leone;Singapore;Slovakia;Slovenia;Solomon Islands;Somalia;South Africa;South Georgia and the South Sandwich Islands;Spain;Sri Lanka;Sudan;Suriname;Svalbard and Jan Mayen;Swaziland;Sweden;Switzerland;Syrian Arab Republic".split(";"),
                sa: "Saint Barthelemy;Saint Helena, Ascension and Tristan da Cunha;Saint Kitts and Nevis;Saint Lucia;Saint Martin (French part);Saint Pierre and Miquelon;Saint Vincent and the Grenadines;Samoa;San Marino;Sao Tome and Principe;Saudi Arabia".split(";"),
                sai: "Saint Barthelemy;Saint Helena, Ascension and Tristan da Cunha;Saint Kitts and Nevis;Saint Lucia;Saint Martin (French part);Saint Pierre and Miquelon;Saint Vincent and the Grenadines".split(";"),
                sam: ["Samoa"],
                san: ["San Marino"],
                sao: ["Sao Tome and Principe"],
                sau: ["Saudi Arabia"],
                se: ["Senegal", "Serbia", "Seychelles"],
                sen: ["Senegal"],
                ser: ["Serbia"],
                sey: ["Seychelles"],
                si: ["Sierra Leone", "Singapore"],
                sie: ["Sierra Leone"],
                sin: ["Singapore"],
                sl: ["Slovakia", "Slovenia"],
                slo: ["Slovakia", "Slovenia"],
                so: ["Solomon Islands", "Somalia", "South Africa", "South Georgia and the South Sandwich Islands"],
                sol: ["Solomon Islands"],
                som: ["Somalia"],
                sou: ["South Africa", "South Georgia and the South Sandwich Islands"],
                sp: ["Spain"],
                spa: ["Spain"],
                sr: ["Sri Lanka"],
                sri: ["Sri Lanka"],
                su: ["Sudan", "Suriname"],
                sud: ["Sudan"],
                sur: ["Suriname"],
                sv: ["Svalbard and Jan Mayen"],
                sva: ["Svalbard and Jan Mayen"],
                sw: ["Swaziland", "Sweden", "Switzerland"],
                swa: ["Swaziland"],
                swe: ["Sweden"],
                swi: ["Switzerland"],
                sy: ["Syrian Arab Republic"],
                syr: ["Syrian Arab Republic"],
                t: "Taiwan;Tajikistan;Tanzania, United Republic of;Thailand;Timor-Leste;Togo;Tokelau;Tonga;Trinidad and Tobago;Tunisia;Turkey;Turkmenistan;Turks and Caicos Islands;Tuvalu".split(";"),
                ta: ["Taiwan", "Tajikistan", "Tanzania, United Republic of"],
                tai: ["Taiwan"],
                taj: ["Tajikistan"],
                tan: ["Tanzania, United Republic of"],
                th: ["Thailand"],
                tha: ["Thailand"],
                ti: ["Timor-Leste"],
                tim: ["Timor-Leste"],
                to: ["Togo", "Tokelau", "Tonga"],
                tog: ["Togo"],
                tok: ["Tokelau"],
                ton: ["Tonga"],
                tr: ["Trinidad and Tobago"],
                tri: ["Trinidad and Tobago"],
                tu: ["Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", "Tuvalu"],
                tun: ["Tunisia"],
                tur: ["Turkey", "Turkmenistan", "Turks and Caicos Islands"],
                tuv: ["Tuvalu"],
                u: "Uganda;Ukraine;United Arab Emirates;United Kingdom;United States;United States Minor Outlying Islands;Uruguay;Uzbekistan".split(";"),
                ug: ["Uganda"],
                uga: ["Uganda"],
                uk: ["Ukraine"],
                ukr: ["Ukraine"],
                un: ["United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands"],
                uni: ["United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands"],
                ur: ["Uruguay"],
                uru: ["Uruguay"],
                uz: ["Uzbekistan"],
                uzb: ["Uzbekistan"],
                v: ["Vanuatu", "Venezuela, Bolivarian Republic of", "Viet Nam", "Virgin Islands, British", "Virgin Islands, U.S."],
                va: ["Vanuatu"],
                van: ["Vanuatu"],
                ve: ["Venezuela, Bolivarian Republic of"],
                ven: ["Venezuela, Bolivarian Republic of"],
                vi: ["Viet Nam", "Virgin Islands, British", "Virgin Islands, U.S."],
                vie: ["Viet Nam"],
                vir: ["Virgin Islands, British", "Virgin Islands, U.S."],
                w: ["Wallis and Futuna", "Western Sahara"],
                wa: ["Wallis and Futuna"],
                wal: ["Wallis and Futuna"],
                we: ["Western Sahara"],
                wes: ["Western Sahara"],
                y: ["Yemen"],
                ye: ["Yemen"],
                yem: ["Yemen"],
                z: ["Zambia", "Zimbabwe"],
                za: ["Zambia"],
                zam: ["Zambia"],
                zi: ["Zimbabwe"],
                zim: ["Zimbabwe"]
            }
        },
        passwordHash: "111111 11111111 112233 121212 123123 123456 1234567 12345678 131313 232323 654321 666666 696969 777777 7777777 8675309 987654 aaaaaa abc123 abc123 abcdef abgrtyu access access14 action albert alexis amanda amateur andrea andrew angela angels animal anthony apollo apples arsenal arthur asdfgh asdfgh ashley asshole august austin badboy bailey banana barney baseball batman beaver beavis bigcock bigdaddy bigdick bigdog bigtits birdie bitches biteme blazer blonde blondes blowjob blowme bond007 bonnie booboo booger boomer boston brandon brandy braves brazil bronco broncos bulldog buster butter butthead calvin camaro cameron canada captain carlos carter casper charles charlie cheese chelsea chester chicago chicken cocacola coffee college compaq computer cookie cooper corvette cowboy cowboys crystal cumming cumshot dakota dallas daniel danielle debbie dennis diablo diamond doctor doggie dolphin dolphins donald dragon dreams driver eagle1 eagles edward einstein erotic extreme falcon fender ferrari firebird fishing florida flower flyers football forever freddy freedom fucked fucker fucking fuckme fuckyou gandalf gateway gators gemini george giants ginger golden golfer gordon gregory guitar gunner hammer hannah hardcore harley heather helpme hentai hockey hooters horney hotdog hunter hunting iceman iloveyou internet iwantu jackie jackson jaguar jasmine jasper jennifer jeremy jessica johnny johnson jordan joseph joshua junior justin killer knight ladies lakers lauren leather legend letmein letmein little london lovers maddog madison maggie magnum marine marlboro martin marvin master matrix matthew maverick maxwell melissa member mercedes merlin michael michelle mickey midnight miller mistress monica monkey monkey monster morgan mother mountain muffin murphy mustang naked nascar nathan naughty ncc1701 newyork nicholas nicole nipple nipples oliver orange packers panther panties parker password password password1 password12 password123 patrick peaches peanut pepper phantom phoenix player please pookie porsche prince princess private purple pussies qazwsx qwerty qwertyui rabbit rachel racing raiders rainbow ranger rangers rebecca redskins redsox redwings richard robert rocket rosebud runner rush2112 russia samantha sammy samson sandra saturn scooby scooter scorpio scorpion secret sexsex shadow shannon shaved sierra silver skippy slayer smokey snoopy soccer sophie spanky sparky spider squirt srinivas startrek starwars steelers steven sticky stupid success suckit summer sunshine superman surfer swimming sydney taylor tennis teresa tester testing theman thomas thunder thx1138 tiffany tigers tigger tomcat topgun toyota travis trouble trustno1 tucker turtle twitter united vagina victor victoria viking voodoo voyager walter warrior welcome whatever william willie wilson winner winston winter wizard xavier xxxxxx xxxxxxxx yamaha yankee yankees yellow zxcvbn zxcvbnm zzzzzz".split(" "),
        timezones: [{
            abbr: "NZDT",
            offset: "+13:00",
            name: "New Zealand Daylight Time"
        },
        {
            abbr: "IDLE",
            offset: "+12:00",
            name: "International Date Line, East"
        },
        {
            abbr: "NZT",
            offset: "+12:00",
            name: "New Zealand Time"
        },
        {
            abbr: "AESST",
            offset: "+11:00",
            name: "Australia Eastern Summer Standard Time"
        },
        {
            abbr: "CADT",
            offset: "+10:30",
            name: "Central Australia Daylight Savings Time"
        },
        {
            abbr: "SADT",
            offset: "+10:30",
            name: "South Australian Daylight Time"
        },
        {
            abbr: "AEST",
            offset: "+10:00",
            name: "Australia Eastern Standard Time"
        },
        {
            abbr: "GST",
            offset: "+10:00",
            name: "Guam Standard Time, USSR Zone 9"
        },
        {
            abbr: "LIGT",
            offset: "+10:00",
            name: "Melbourne, Australia"
        },
        {
            abbr: "SAST",
            offset: "+09:30",
            name: "South Australia Standard Time"
        },
        {
            abbr: "CAST",
            offset: "+09:30",
            name: "Central Australia Standard Time"
        },
        {
            abbr: "AWSST",
            offset: "+09:00",
            name: "Australia Western Summer Standard Time"
        },
        {
            abbr: "JST",
            offset: "+09:00",
            name: "Japan Standard Time,USSR Zone 8"
        },
        {
            abbr: "KST",
            offset: "+09:00",
            name: "Korea Standard Time"
        },
        {
            abbr: "MHT",
            offset: "+09:00",
            name: "Kwajalein Time"
        },
        {
            abbr: "MT",
            offset: "+08:30",
            name: "Moluccas Time"
        },
        {
            abbr: "CCT",
            offset: "+08:00",
            name: "China Coastal Time"
        },
        {
            abbr: "WADT",
            offset: "+08:00",
            name: "West Australian Daylight Time"
        },
        {
            abbr: "JT",
            offset: "+07:30",
            name: "Java Time"
        },
        {
            abbr: "ALMST",
            offset: "+07:00",
            name: "Almaty Summer Time"
        },
        {
            abbr: "WAST",
            offset: "+07:00",
            name: "West Australian Standard Time"
        },
        {
            abbr: "CXT",
            offset: "+07:00",
            name: "Christmas (Island) Time"
        },
        {
            abbr: "ALMT",
            offset: "+06:00",
            name: "Almaty Time"
        },
        {
            abbr: "MAWT",
            offset: "+06:00",
            name: "Mawson (Antarctica) Time"
        },
        {
            abbr: "IOT",
            offset: "+05:00",
            name: "Indian Chagos Time"
        },
        {
            abbr: "MVT",
            offset: "+05:00",
            name: "Maldives Island Time"
        },
        {
            abbr: "TFT",
            offset: "+05:00",
            name: "Kerguelen Time"
        },
        {
            abbr: "AFT",
            offset: "+04:30",
            name: "Afganistan Time"
        },
        {
            abbr: "EAST",
            offset: "+04:00",
            name: "Antananarivo Savings Time"
        },
        {
            abbr: "MUT",
            offset: "+04:00",
            name: "Mauritius Island Time"
        },
        {
            abbr: "RET",
            offset: "+04:00",
            name: "Reunion Island Time"
        },
        {
            abbr: "SCT",
            offset: "+04:00",
            name: "Mahe Island Time"
        },
        {
            abbr: "IT",
            offset: "+03:30",
            name: "Iran Time"
        },
        {
            abbr: "EAT",
            offset: "+03:00",
            name: "Antananarivo, Comoro Time"
        },
        {
            abbr: "BT",
            offset: "+03:00",
            name: "Baghdad Time"
        },
        {
            abbr: "EETDST",
            offset: "+03:00",
            name: "Eastern Europe Daylight Savings Time"
        },
        {
            abbr: "HMT",
            offset: "+03:00",
            name: "Hellas Mediterranean Time (?)"
        },
        {
            abbr: "BDST",
            offset: "+02:00",
            name: "British Double Standard Time"
        },
        {
            abbr: "CETDST",
            offset: "+02:00",
            name: "Central European Daylight Savings Time"
        },
        {
            abbr: "FWT",
            offset: "+02:00",
            name: "French Winter Time"
        },
        {
            abbr: "IST",
            offset: "+02:00",
            name: "Israel Standard Time"
        },
        {
            abbr: "MEST",
            offset: "+02:00",
            name: "Middle Europe Summer Time"
        },
        {
            abbr: "METDST",
            offset: "+02:00",
            name: "Middle Europe Daylight Time"
        },
        {
            abbr: "SST",
            offset: "+02:00",
            name: "Swedish Summer Time"
        },
        {
            abbr: "BST",
            offset: "+01:00",
            name: "British Summer Time"
        },
        {
            abbr: "CET",
            offset: "+01:00",
            name: "Central European Time"
        },
        {
            abbr: "DNT",
            offset: "+01:00",
            name: "Dansk Normal Tid"
        },
        {
            abbr: "FST",
            offset: "+01:00",
            name: "French Summer Time"
        },
        {
            abbr: "MET",
            offset: "+01:00",
            name: "Middle Europe Time"
        },
        {
            abbr: "NOR",
            offset: "+01:00",
            name: "Norway Standard Time"
        },
        {
            abbr: "SET",
            offset: "+01:00",
            name: "Seychelles Time"
        },
        {
            abbr: "SWT",
            offset: "+01:00",
            name: "Swedish Winter Time"
        },
        {
            abbr: "WETDST",
            offset: "+01:00",
            name: "Western Europe Daylight Savings Time"
        },
        {
            abbr: "GMT",
            offset: "+00:00",
            name: "Greenwich Mean Time"
        },
        {
            abbr: "WET",
            offset: "+00:00",
            name: "Western Europe"
        },
        {
            abbr: "WAT",
            offset: "-01:00",
            name: "West Africa Time"
        },
        {
            abbr: "NDT",
            offset: "-02:30",
            name: "Newfoundland Daylight Time"
        },
        {
            abbr: "ADT",
            offset: "-03:00",
            name: "Atlantic Daylight Time"
        },
        {
            abbr: "NST",
            offset: "-03:30",
            name: "Newfoundland Standard Time"
        },
        {
            abbr: "AST",
            offset: "-04:00",
            name: "Atlantic Standard Time (Canada)"
        },
        {
            abbr: "ACST",
            offset: "-04:00",
            name: "Atlantic/Porto Acre Summer Time"
        },
        {
            abbr: "ACT",
            offset: "-05:00",
            name: "Atlantic/Porto Acre Standard Time"
        },
        {
            abbr: "EDT",
            offset: "-04:00",
            name: "Eastern Daylight Time"
        },
        {
            abbr: "CDT",
            offset: "-05:00",
            name: "Central Daylight Time"
        },
        {
            abbr: "EST",
            offset: "-05:00",
            name: "Eastern Standard Time"
        },
        {
            abbr: "CST",
            offset: "-06:00",
            name: "Central Standard Time"
        },
        {
            abbr: "MDT",
            offset: "-06:00",
            name: "Mountain Daylight Time"
        },
        {
            abbr: "MST",
            offset: "-07:00",
            name: "Mountain Standard Time"
        },
        {
            abbr: "PDT",
            offset: "-07:00",
            name: "Pacific Daylight Time"
        },
        {
            abbr: "AKDT",
            offset: "-08:00",
            name: "Alaska Daylight Time"
        },
        {
            abbr: "PST",
            offset: "-08:00",
            name: "Pacific Standard Time"
        },
        {
            abbr: "AKST",
            offset: "-09:00",
            name: "Alaska Standard Time"
        },
        {
            abbr: "HDT",
            offset: "-09:00",
            name: "Hawaii/Alaska Daylight Time"
        },
        {
            abbr: "AHST",
            offset: "-10:00",
            name: "Alaska-Hawaii Standard Time"
        },
        {
            abbr: "HST",
            offset: "-10:00",
            name: "Hawaii Standard Time"
        },
        {
            abbr: "CAT",
            offset: "-10:00",
            name: "Central Alaska Time"
        },
        {
            abbr: "NT",
            offset: "-11:00",
            name: "Nome Time"
        },
        {
            abbr: "IDLW",
            offset: "-12:00",
            name: "International Date Line, West"
        }]
    })
})(jQuery); (function (b) {
    b.extend(b.cf, {
        validation: {
            hasValue: function (a) {
                return null !== a && void 0 !== a && "" !== a
            },
            email: function (a) {
                return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(a)
            },
            url: function (a) {
                return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)
            },
            domain: function (a) {
                a = b.trim(a);
                /^((https?|ftp):)?\/\//.test(a) || (a = "http://" + a);
                return b.cf.validation.url(a)
            },
            date: function (a) {
                return ! /Invalid|NaN/.test(new Date(a))
            },
            dateISO: function (a) {
                return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)
            },
            number: function (a) {
                return /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)
            },
            digits: function (a) {
                return /^\d+$/.test(a)
            },
            creditcard: function (a) {
                a = a.replace(/\D/g, "");
                return !a || /[^0-9-]+/.test(a) || 14 > a.length || 18 < a.length ? !1 : !0
            },
            listOf: function (a, c) {
                c = b.extend({
                    emptyOk: !1
                },
                c);
                return function (d) {
                    var e = d.split(","),
                    e = b.map(e, b.trim);
                    if (c.emptyOk && "" == d) return !0;
                    filter = c.emptyOk ?
                    function (b) {
                        return a(b) || "" == b
                    } : a;
                    return !b.grep(e, filter, !0).length
                }
            }
        },
        rating: {
            passwordStrength: function (a) {
                var c = /[a-z]/.test(a),
                d = /[A-Z]/.test(a.substring(0, 1).toLowerCase() + a.substring(1)),
                e = /[0-9]/.test(a);
                /[0-9].*[0-9]/.test(a);
                var f = /[^a-zA-Z0-9]/.test(a),
                g = /^(.)\1+$/.test(a);
                return !a || 6 > a.length || 0 <= b.inArray(a.toLowerCase(), b.cf.passwordHash) || g ? 0 : (c && d && e || c && e && f || d && e && f) && 8 <= a.length || 20 <= a.length ? 1 : (c && d || c && e || d && e || c && f || e && f) && 6 < a.length ? 0.66 : 0.33
            }
        },
        resolveCreditcardType: function (a) {
            a = a.replace(/\D/g, "");
            return /^(51|52|53|54|55)/.test(a) ? "mastercard" : /^(4)/.test(a) ? "visa" : /^(34|37)/.test(a) ? "amex" : /^(6011)/.test(a) ? "discover" : !1
        }
    });
    b.extend(b.fn, {
        rateValue: function (a) {
            a = b.extend({
                by: b.cf.rating.passwordStrength
            },
            a);
            this.each(function () {
                var c = b(this);
                if (c.is('input[type="text"]') || c.is('input[type="password"]')) {
                    var d = b('<div class="rating"></div>').insertAfter(c),
                    e = b('<div class="mask"></div>').appendTo(d);
                    c.bind("keyup blur",
                    function () {
                        var b = Math.min(a.by(c.val()), 1);
                        e.fadeTo(100, Math.max(1 - Math.abs(b), 0));
                        1 > b ? d.addClass("weak") : d.removeClass("weak")
                    });
                    c.bind("valid",
                    function () {
                        d.removeClass("invalid")
                    });
                    c.bind("invalid",
                    function () {
                        d.addClass("invalid")
                    })
                }
            })
        },
        valid: function (a) {
            var a = b.extend({
                iff: b.cf.validation.hasValue,
                errorDisplayTarget: null,
                useTooltip: !0
            },
            a),
            c = {
                "default": {
                    showOn: "invalid",
                    hideOn: "valid",
                    delay: 0,
                    offset: 0,
                    align: "left",
                    backgroundColor: "transparent",
                    textCSS: {
                        color: "#cc2929",
                        fontWeight: "normal"
                    },
                    shadow: !1,
                    autoPointer: !1,
                    attributes: ["error"],
                    customContent: function (a) {
                        var c = a.text();
                        a.text("");
                        return b('<span class="cf-icon inline invalid"></span><span>' + c + "</span>")
                    }
                }
            };
            c["right-margin-top"] = b.extend({},
            c["default"], {
                align: "right-margin-top",
                width: "210"
            });
            c["bottom-margin-right"] = b.extend({},
            c["default"], {
                align: "right"
            });
            this.each(function () {
                var d = b(this),
                e = a.errorDisplayTarget || d,
                f = function () {
                    return "checkbox" == d.attr("type") ? d.is(":checked") : d.val()
                };
                e != d && e.attr("error", d.attr("error"));
                if (d.is("input") || d.is("textarea")) {
                    var g = /tooltip-([^ ]*)/.exec(d.attr("class")),
                    g = g && g[1] in c ? g[1] : "default";
                    a.useTooltip && e.tooltip(c[g]);
                    d.data("validField", !1);
                    d.bind("keyup",
                    function () {
                        var b = a.iff(f());
                        d.data("validField") && !b ? (d.data("validField", !1).addClass("invalid"), e.trigger("invalid")) : b && (d.data("validField", !0).removeClass("invalid"), e.trigger("valid"))
                    });
                    d.bind("change",
                    function () {
                        a.iff(f()) ? (d.data("validField", !0).removeClass("invalid"), e.trigger("valid")) : (d.data("validField", !1).addClass("invalid"), e.trigger("invalid"))
                    });
                    d.bind("blur",
                    function () {
                        a.iff(f()) ? (d.data("validField", !0).removeClass("invalid"), e.trigger("valid")) : (d.data("validField", !1).addClass("invalid"), e.trigger("invalid"))
                    })
                }
            });
            return this
        },
        areValid: function (a) {
            var a = b.extend({
                blur: !0,
                redispatch: !1
            },
            a),
            c = !0;
            a.blur && this.blur();
            this.each(function () {
                var d = b(this); !1 === d.data("validField") && (c = !1, a.redispatch && d.trigger("invalid"))
            });
            return c
        },
        resetValidation: function () {
            this.each(function () {
                b(this).removeData("validField").removeClass("invalid").trigger("valid")
            })
        }
    })
})(jQuery); (function (b) {
    b.extend(b.cf, {
        windowProperties: function () {
            var a = 0,
            b = 0,
            d = 0,
            e = 0;
            window.document.innerHeight && 0 < window.document.innerHeight ? (a = window.document.innerWidth, b = window.document.innerHeight, d = window.pageXOffset, e = window.pageYOffset) : window.document.documentElement.clientHeight && window.document.documentElement.clientHeight > b ? (a = window.document.documentElement.clientWidth, b = window.document.documentElement.clientHeight, d = document.documentElement.scrollLeft, e = document.documentElement.scrollTop) : window.document.body.clientHeight && window.document.body.clientHeight > b && (a = window.document.body.clientWidth, b = window.document.body.clientHeight, d = document.body.scrollLeft, e = document.body.scrollTop);
            return {
                width: a,
                height: b,
                x: d,
                y: e
            }
        },
        normalizeCSSMeasurement: function (a) {
            a = b.isFunction(a) ? a() : a;
            return "number" == typeof a || "string" == typeof a && !("px" == a.substr(a.length - 2, 2) || "%" == a.substr(a.length - 1, 1)) ? a + "px" : a
        },
        normalizeDigitalMeasurement: function (a) {
            a = b.isFunction(a) ? a() : a;
            return "string" == typeof a ? "px" == a.substr(a.length - 2, 2) ? parseInt(a.substr(0, a.length - 2)) : "%" == a.substr(a.length - 1, 1) ? -1 : parseInt(a) : a
        }
    });
    b.extend(b.fn, {
        margin: function () {
            var a = this.css("marginTop").substr(0, this.css("marginTop").length - 2),
            b = this.css("marginBottom").substr(0, this.css("marginBottom").length - 2),
            d = this.css("marginLeft").substr(0, this.css("marginLeft").length - 2),
            e = this.css("marginRight").substr(0, this.css("marginRight").length - 2);
            return {
                top: a,
                bottom: b,
                left: d,
                right: e,
                horizontal: d + e,
                vertical: a + b
            }
        },
        marginalWidth: function () {
            return this.width() + this.margin().horizontal
        },
        marginalInnerWidth: function () {
            return this.innerWidth() + this.margin().horizontal
        },
        marginalOuterWidth: function () {
            return this.outerWidth() + this.margin().horizontal
        },
        marginalHeight: function () {
            return this.height() + this.margin().vertical
        },
        marginalInnerHeight: function () {
            return this.innerHeight() + this.margin().vertical
        },
        marginalOuterHeight: function () {
            return this.outerHeight() + this.margin().vertical
        },
        scrollTopMax: function () {
            return this.get(0).scrollHeight - this.innerHeight()
        }
    });
    b.cf.Request = function (a) {
        b.extend(this, a)
    };
    b.cf.Request.prototype = {
        name: "",
        url: "",
        data: {},
        type: "GET",
        formatQuery: function (a) {
            return a
        },
        formatResponse: function (a) {
            return this.lastResult = a
        },
        clone: function () {
            return b.extend({},
            this)
        }
    };
    b.cf.MultiRequest = function (a) {
        this.requests = a ? a : []
    };
    b.cf.MultiRequest.prototype = {
        requests: [],
        addRequest: function (a) {
            a instanceof b.cf.Request ? this.requests.push(nameOrRequest) : this.requests.push(new b.cf.Request(a))
        },
        clone: function () {
            return b.extend({},
            this)
        }
    };
    b.cf.Query = function (a) {
        if (this === window || this === b.cf) return !1;
        b.extend(this, a)
    };
    b.cf.Query.prototype = {
        id: "",
        url: "",
        apiVersion: "v2",
        act: "",
        data: {},
        type: "GET",
        dataType: "json",
        async: !0,
        cache: !0,
        lastResponse: null,
        mapQuery: function (a) {
            return a.data
        },
        mapResponse: function (a) {
            return a
        },
        query: function (a) {
            var c = this,
            d = b.cf.atok(),
            a = a ? a : b.noop;
            return b.ajax({
                url: c.url ? c.url : "/api/" + c.apiVersion + "/" + c.act,
                type: c.type,
                async: c.async,
                data: function () {
                    var a = c.mapQuery(c);
                    d && b.extend(a, {
                        atok: d
                    });
                    return a
                }(),
                dataType: c.dataType,
                error: function () {
                    b.cf.log("There was an error making an AJAX call to " + c.url, b.cf.logType.error);
                    a(!1)
                },
                success: function (e) {
                    c.lastResponse = e;
                    "error" === e.result && "redirect" in e && "invalid_atok" === e.redirect.details ? (b.cf.notify("Your session needs to be refreshed, or your network settings have changed. Please refresh the page and try again. If the problem continues, please contact support!", b.cf.noteType.alert), a(!1)) : a(c.mapResponse(e), c)
                }
            })
        },
        withData: function (a) {
            var c = b.extend(new b.cf.Query, this);
            b.extend(c.data, a);
            return c
        },
        withAct: function (a) {
            var c = b.extend(new b.cf.Query, this);
            c.url ? c.data.act = a : c.act = a;
            return c
        },
        withUrl: function (a) {
            var c = b.extend(new b.cf.Query, this);
            c.url = a;
            return c
        }
    };
    b.cf.MockQuery = function (a) {
        b.extend(this, a)
    };
    b.cf.MockQuery.prototype = b.extend(new b.cf.Query, {
        url: "",
        query: function (a) {
            a(this.mapResponse(this.mapQuery(this)));
            return b.Deferred().resolve()
        }
    });
    b.widget("ui.cloudflareWidget", {
        invalidateOption: function (a) {
            a = "_invalidate" + a.substr(0, 1).toUpperCase() + a.substr(1, a.length - 1);
            if (a in this) this[a]()
        }
    });
    b.cf.fragment = function (a) {
        this.options = a
    };
    b.cf.fragment.prototype.attach = function (a) {
        var c = this,
        d = c.options.children;
        d && (b.each(d,
        function (c, d) {
            b(a).append(d)
        }), b.each(d,
        function (a, b) {
            if (c.options.widget && c.options.widget in b) b[c.options.widget]("onAttach")
        }))
    };
    b.cf.fragment.prototype.addChild = function (a) {
        this.options.children.push(a)
    }
})(jQuery); (function (b) {
    b.widget("ui.billingCapture", b.ui.cloudflareWidget, {
        options: {
            prefill: {},
            layout: "default",
            compact: !0,
            complete: b.noop,
            beforeSubmit: b.noop,
            afterSubmit: b.noop
        },
        layouts: {
            "default": {},
            dark: {
                tooltipClass: "tooltip-right-margin-top"
            },
            bright: {
                tooltipClass: "tooltip-right-margin-top",
                submitLabel: "Submit Billing Info",
                comboBox: {
                    height: "35px",
                    fontSize: "15.5px"
                }
            }
        },
        _create: function () {
            if (this.options) {
                var a = this,
                c;
                this.range = function e(a, b) {
                    return a <= b ? [a].concat(e(a + 1, b)) : []
                };
                this.form = {
                    "Credit card information": {
                        CreditCard: {
                            label: "Credit card number",
                            type: "text",
                            "class": "kilo creditcard required",
                            placeholder: "xxxx xxxx xxxx xxxx",
                            error: "This is not a valid credit card number",
                            context: "Visa, Mastercard, AMEX,<br/> and Discover are accepted."
                        },
                        Name: {
                            label: "Name on card",
                            type: "text",
                            "class": "mega required",
                            placeholder: "e.g. John Q. Public",
                            error: "The full name of the credit card owner is required"
                        },
                        Expiration: {
                            label: 'Expiration date <span class="help">MM / YYYY</span>',
                            type: "expiration",
                            "class": "required"
                        },
                        CVV: {
                            label: 'CVV / CVV2<span class="help cvv"><a href="javascript:void(0)" tooltip="The CVV is a three or four digit number on the back of your credit or debit card">(What\'s this?)</a></span>',
                            type: "text",
                            "class": "milli required",
                            error: "Not a valid CVV. If this is an AMEX card, please use the 4 digit CVV."
                        }
                    },
                    "Billing address": {
                        Street: {
                            label: "Street address",
                            type: "text-double",
                            "class": "mega",
                            error: "You must provide a street address that is at least one line"
                        },
                        City: {
                            label: "City",
                            type: "text",
                            "class": "kilo",
                            error: "You must indicate a valid city"
                        },
                        State: {
                            label: "State / province",
                            type: "text",
                            "class": "kilo",
                            error: "You must indicate a state or province"
                        },
                        Country: {
                            label: 'Country<span class="help country"><a href="javascript:void(0)" tooltip="Your country of origin was predicted based on your IP address, but you can change it if it is incorrect">(Why is this already filled?)</a></span>',
                            type: "select",
                            "class": "kilo",
                            placeholder: "Select a country"
                        },
                        Zip: {
                            label: "Zip / postal code",
                            type: "text",
                            "class": "centi",
                            error: "You must provide a valid zip or postal code"
                        },
                        Tele: {
                            label: 'Telephone <span class="help">(Optional)</span>',
                            type: "text",
                            "class": "kilo"
                        },
                        CompanyName: {
                            label: 'Company Name <span class="help">(Optional)</span>',
                            type: "text",
                            "class": "mega"
                        }
                    }
                };
                this.layout = this.layouts[this.options.layout] || {};
                this.widgetElement = b('<div><a class="cancel" href="#">Cancel</a><form class="billing-capture" method="POST"></form></div>');
                this.formElement = this.widgetElement.find("form");
                this._buildForm();
                c = this.formElement.find(".billing-Country");
                b.cf.buildOptions(c, {
                    data: b.cf.countryHash.unicodeCountry,
                    placeholder: c.attr("placeholder"),
                    selected: c.data("selected")
                });
                c = this.layout.comboBox || {};
                this.formElement.find("select").combobox(c);
                this.formElement.find("select.billing-Country").combobox(b.extend({
                    width: "235px"
                },
                c));
                this.register = new b.cf.Query({
                    act: "billing/set",
                    type: "POST",
                    mapResponse: function (c) {
                        c.result && "success" == c.result ? (b.cf.notify("Billing information updated"), a._done()) : c.result && "error" == c.result ? b.cf.notify(c.msg, b.cf.noteType.error) : b.cf.notify('There was an error processing your request. If this problem persists, please contact us at <a href="mailto:help@cloudflare.com">help@cloudflare.com</a>', b.cf.noteType.error);
                        a.options.afterSubmit();
                        return c
                    }
                });
                a.doRegister = function () {
                    var c = function (b) {
                        return a.formElement.find(".billing-" + b)
                    };
                    b.extend(a.register.data, {
                        billing_first: c("Name").val().substring(0, c("Name").val().indexOf(" ")),
                        billing_last: b.trim(c("Name").val().substring(c("Name").val().indexOf(" ") + 1, c("Name").val().length)),
                        billing_addr1: c("StreetOne").val(),
                        billing_addr2: c("StreetTwo").val(),
                        billing_city: c("City").val(),
                        billing_state: c("State").val(),
                        billing_zip: c("Zip").val(),
                        billing_country: c("Country").val(),
                        billing_company: c("CompanyName").val(),
                        billing_tele: c("Tele").val(),
                        cc_card_number: c("CreditCard").val().replace(/\D/g, ""),
                        cc_card_exp_month: c("ExpirationMonth").val(),
                        cc_card_exp_year: c("ExpirationYear").val(),
                        cc_card_code: c("CVV").val()
                    });
                    a.formElement.find("input").areValid() ? (a.register.query(), b.cf.notify("Updating your billing information...")) : (b.cf.notify("Please check your billing information", b.cf.noteType.error), a.options.afterSubmit())
                };
                c = function () {
                    !1 !== a.options.beforeSubmit() && a.doRegister();
                    return !1
                };
                this.formElement.bind("submit", c);
                this.formElement.find(".button").bind("click", c);
                this.widgetElement.find(".cancel").bind("click",
                function () {
                    a._cancel();
                    return !1
                });
                this.widgetElement.hide().appendTo(this.element);
                this.element.append(this.widgetElement);
                this.refresh();
                this.widgetElement.slideDown();
                this.enable()
            }
        },
        _buildForm: function () {
            var a = this,
            c = "",
            d = this.layout.submitLabel || "Submit";
            b.each(this.form,
            function (d, e) {
                var h = "";
                b.each(e,
                function () {
                    h += a._buildRow.apply(a, arguments)
                });
                c += "<h3>" + d + '</h3><div class="form' + (a.options.compact ? " compact" : "") + '">' + h + "</div>"
            });
            c += '<div class="row last clearfix"><div class="cell float-right"><a class="button green" tabindex="1" href="#"><span class="label">' + d + "</span></a></div>";
            this.formElement.append(c);
            var e = function (b) {
                return a.formElement.find(".billing-" + b)
            };
            e("Name").valid({
                iff: function (a) {
                    return b.cf.validation.hasValue(a) && 1 < a.split(" ").length
                }
            });
            e("City").valid();
            e("State").valid();
            e("Country").valid();
            e("StreetOne").valid({
                errorDisplayTarget: e("StreetTwo")
            });
            e("CreditCard").valid({
                iff: b.cf.validation.creditcard
            });
            e("ExpirationYear").valid({
                iff: function (a) {
                    return b.cf.validation.number(a) && 4 == a.length && 2009 < parseInt(a)
                }
            });
            e("CVV").valid({
                iff: function (a) {
                    var c = b.validator.methods.creditcardtypes(e("CreditCard").val(), null, {
                        amex: !0
                    }),
                    d = a.length;
                    return b.cf.validation.number(a) && (c ? 4 == d : 3 == d)
                }
            });
            e("Zip").valid()
        },
        _buildRow: function (a, c) {
            var d = function (a, b) {
                return b ? '<div class="' + a + ' cell">' + b + "</div>" : ""
            },
            e = function (a, b) {
                return b ? a + '="' + b + '" ' : ""
            },
            f = function (a) {
                return '<option value="' + a + '">' + a + "</option>"
            },
            g = this.layout.tooltipClass || "",
            h = "";
            switch (c.type) {
                case "expiration":
                    h = (new Date).getFullYear();
                    h = d("input", '<select name="' + a + 'Month" ' + e("class", "billing-" + a + "Month " + c["class"] + " " + g) + e("tabindex", "1") + ">" + b.map(this.range(1, 12), f).join("") + '</select><span>/</span><select name="' + a + 'Year" ' + e("class", "billing-" + a + "Year " + c["class"] + " " + g) + e("tabindex", "1") + ">" + b.map(this.range(h, h + 10), f).join("") + "</select>");
                    break;
                case "select":
                    h = d("input", '<select name="' + a + '" ' + e("class", "billing-" + a + " " + c["class"] + " " + g) + e("placeholder", c.placeholder) + e("tabindex", "1") + "></select>");
                    break;
                case "text-double":
                    h = d("input", '<input name="' + a + 'One" ' + e("type", "text") + e("class", "billing-" + a + "One " + c["class"] + " " + g) + e("placeholder", c.placeholder) + e("error", c.error) + e("tabindex", "1") + '/><input name="' + a + 'Two" ' + e("type", "text") + e("class", "billing-" + a + "Two " + c["class"] + " " + g) + e("tabindex", "1") + "/>");
                    break;
                default:
                    h = d("input", '<input name="' + a + '" ' + e("type", c.type) + e("class", "billing-" + a + " " + c["class"] + " " + g) + e("placeholder", c.placeholder) + e("error", c.error) + e("tabindex", "1") + "/>")
            }
            return '<div class="row">' + d("label", c.label) + h + d("context", c.context) + "</div>"
        },
        refresh: function () { },
        widget: function () {
            return this.widgetElement
        },
        enable: function () {
            this.enabled = !0
        },
        disable: function () {
            this.enabled = !1
        },
        _cancel: function () {
            this.options.complete(!1);
            this.destroy()
        },
        _done: function () {
            this.options.complete(!0);
            this.destroy()
        },
        destroy: function () {
            b.Widget.prototype.destroy.apply(this, arguments);
            this.widgetElement.remove()
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.rowTray", b.ui.cloudflareWidget, {
        options: {
            customClass: "",
            skeleton: '<td class="left"></td><td class="middle"></td><td class="right"></td>',
            onClose: function (a) {
                a.data.widget.hide()
            }
        },
        _create: function () {
            if (this.options) {
                var a = this.element,
                c = b('<div class="cf-tray-close cancel">close</div>');
                this.widgetElement = b('<tr class="cf-tray' + (this.options.customClass ? " " + this.options.customClass : "") + '">' + this.options.skeleton + "</tr>");
                this.widgetElement.find(".right").append(c);
                c.click({
                    widget: this.widgetElement
                },
                this.options.onClose);
                a.is("tr") ? this.widgetElement.insertAfter(a) : a.is("tbody") || a.is("table") && a.children("tr").length ? this.widgetElement.appendTo(a) : b("<table></table>").append(this.widgetElement).appendTo(a);
                this.enable();
                return this.widgetElement
            }
        },
        widget: function () {
            return this.widgetElement
        },
        enable: function () {
            this.enabled = !0
        },
        disable: function () {
            this.enabled = !1
        },
        _cancel: function () {
            this.options.complete(!1);
            this.destroy()
        },
        _done: function () {
            this.options.complete(!0);
            this.destroy()
        },
        destroy: function () {
            b.Widget.prototype.destroy.apply(this, arguments);
            this.widgetElement.remove()
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.toggleSelector", b.ui.cloudflareWidget, {
        options: {
            skin: "window-slider",
            onLabel: "On",
            offLabel: "Off"
        },
        _create: function () {
            if (this.options) {
                var a = this;
                this.elementIsCheckbox ? (this.element.addClass("ui-helper-hidden-accessible"), this.checked = this.element.is(":checked")) : this.checked = !1;
                this._resolveToggleElement();
                this.toggleElement.addClass("cf-ui toggle");
                switch (a.options.skin) {
                    case "knob-slider":
                        a.toggleElement.addClass("skin-knob-slider");
                        a._drawSkinKnobSlider();
                        break;
                    default:
                    case "window-slider":
                        a.toggleElement.addClass("skin-window-slider"),
                        a._drawSkinWindowSlider()
                }
                this.toggleElement.bind("click",
                function () {
                    if (a.enabled) if (a.elementIsCheckbox) {
                        var b = a.element.attr("checked");
                        a.element.attr("checked", b ? null : "checked").change()
                    } else a.refresh()
                });
                this.elementIsCheckbox && this.element.bind("change",
                function () {
                    a.enabled && a.refresh()
                });
                this.refresh();
                this.enable()
            }
        },
        _drawSkinWindowSlider: function () {
            this.toggleElementStructure = b('<div><div class="left"><div></div></div><div class="right"><div></div></div><div class="fill"><div class="left"></div><div class="middle"><div class="left"></div><div class="middle"></div><div class="right"></div></div><div class="right"></div></div></div><ul><li class="left"></li><li class="right"></li></ul>');
            this.toggleElement.append(this.toggleElementStructure);
            this.toggleElement.find("li").first().text(this.options.onLabel);
            this.toggleElement.find("li").last().text(this.options.offLabel);
            this.toggleElement.css({
                width: 8 * this.toggleElement.find("li").text().length + 100 + "px"
            });
            this.toggleElement.find("div.fill > div.left, div.fill > div.right").css({
                width: this.toggleElement.find("div.fill > div.left").width() + 5 + "px"
            });
            this.toggleElement.find("div.fill > div.middle").css({
                width: this.toggleElement.find("div.fill > div.middle").width() - 10 + "px",
                left: Math.floor(this.toggleElement.find("div.fill > div.left").width()) + "px",
                right: Math.floor(this.toggleElement.find("div.fill > div.right").width()) + "px"
            });
            this.toggleElement.find("div.fill").css({
                left: this.toggleElement.width() - (this.toggleElement.find("div.fill > div.left").width() + this.toggleElement.find("div.fill > div.middle").width()) - 5 + "px"
            });
            this.animatedElement = this.toggleElement.find("div.fill")
        },
        _drawSkinKnobSlider: function () {
            this.toggleElement.append('<div class="viewport"><div class="slider"><ul><li class="label left"></li><li class="label right"></li></ul></div></div><div class="slider"><div class="knob"></div></div>');
            this.toggleElement.find("li.left").text(this.options.onLabel);
            this.toggleElement.find("li.right").text(this.options.offLabel);
            this.animatedElement = this.toggleElement.find(".slider")
        },
        _resolveToggleElement: function () {
            this.element.is(":checkbox") ? (this.elementIsCheckbox = !0, this.toggleElement = this.element.after(b("<div></div>")).next()) : this.toggleElement = this.element
        },
        _resolveChecked: function () {
            this.checked = this.elementIsCheckbox ? this.element.is(":checked") : !this.checked
        },
        _resolveAnimatedElementOffset: function () {
            switch (this.options.skin) {
                case "knob-slider":
                    return this.checked ? "0px" : "-43px";
                default:
                case "window-slider":
                    return this.checked ? -1 * this.toggleElement.find("div.fill > div.left").width() + 5 + "px" : this.toggleElement.width() - (this.toggleElement.find("div.fill > div.left").width() + this.toggleElement.find("div.fill > div.middle").width()) - 5 + "px"
            }
        },
        refresh: function (a) {
            this._resolveChecked();
            var b = this._resolveAnimatedElementOffset(); !0 === a ? this.animatedElement.stop().css({
                left: b
            }) : this.animatedElement.stop().animate({
                left: b
            },
            400, "swing")
        },
        widget: function () {
            return this.toggleElement
        },
        enable: function () {
            this.enabled = !0
        },
        disable: function () {
            this.enabled = !1
        },
        destroy: function () { }
    })
})(jQuery); (function (b) {
    b.widget("ui.markedSelector", {
        options: {
            activeClass: "active",
            activeIndex: null,
            animated: !0
        },
        _create: function () {
            var a = this;
            a.element.is("ul") ? (a.selector = b('<div class="markerContainer"></div>'), a.element.prepend(a.selector), a.element.addClass(a._resolveWidgetClasses()), a.activeMarker = null, a.hoverMarker = null, a.element.children("li." + a.options.activeClass).addClass("active"), a.options.activeClass = "active" == a.options.activeClass ? "active" : "active " + a.options.activeClass, a.element.children("li").bind("mouseenter",
            function (c) {
                c = b(c.currentTarget);
                if (c.is("li:not(.active)")) {
                    var d = parseInt(c.css("marginLeft").substr(0, c.css("marginLeft").length - 2)),
                    e = parseInt(c.css("marginTop").substr(0, c.css("marginTop").length - 2));
                    null == a.hoverMarker && (a.hoverMarker = a._resolveMarker(), a.hoverMarker.addClass("hover marker"), a.selector.prepend(a.hoverMarker), a.hoverMarker.css({
                        left: c.position().left + d + "px",
                        top: c.position().top + e + "px",
                        width: c.outerWidth() + "px",
                        height: c.outerHeight() + "px"
                    }), a.hoverMarker.hide().fadeIn(200));
                    a.hoverMarker.stop(!1).animate({
                        left: c.position().left + d + "px",
                        top: c.position().top + e + "px",
                        width: c.outerWidth() + "px",
                        height: c.outerHeight() + "px",
                        opacity: 1
                    },
                    200)
                } else a._killHoverMarker()
            }).bind("click",
            function (c) {
                c = b(c.currentTarget);
                c.is("li") && a.selectItem(c)
            }), a.element.bind("mouseleave",
            function (c) {
                b(c.currentTarget).is("ul") && a._killHoverMarker()
            }), null != a.options.activeIndex ? a.selectItem(a.options.activeIndex) : a.element.children("li.active").each(function (b, d) {
                a.selectItem(d)
            })) : a.destroy()
        },
        _resolveWidgetClasses: function () {
            return "cf-ui selector" + (this.options.extraClass && "" != this.options.extraClass ? this.options.extraClass : "")
        },
        _resolveMarker: function () {
            return b("<div></div>")
        },
        _killHoverMarker: function () {
            if (null != this.hoverMarker) {
                var a = this.hoverMarker;
                this.hoverMarker = null;
                a.stop().fadeOut(200,
                function () {
                    a.remove()
                })
            }
        },
        selectItem: function (a) {
            var c = this,
            a = "number" == typeof a ? c.element.children("li").eq(a) : b(a),
            d = "number" == typeof a ? a : a.index() - c.element.children("li").index();
            c.element.children("li").not(a).removeClass(c.options.activeClass);
            a.addClass(c.options.activeClass);
            var e = parseInt(a.css("marginLeft").substr(0, a.css("marginLeft").length - 2)),
            f = parseInt(a.css("marginTop").substr(0, a.css("marginTop").length - 2));
            null == c.activeMarker && (c.activeMarker = c._resolveMarker(), c.activeMarker.addClass("active marker"), c.selector.prepend(c.activeMarker), c.activeMarker.css({
                left: a.position().left + e + "px",
                top: a.position().top + f + "px",
                width: a.outerWidth() + "px",
                height: a.outerHeight() + "px"
            }), c.activeMarker.hide().fadeIn(200));
            c.options.animated ? c.activeMarker.stop(!1).animate({
                left: a.position().left + e + "px",
                top: a.position().top + f + "px",
                width: a.outerWidth() + "px",
                height: a.outerHeight() + "px",
                opacity: 1
            },
            200,
            function () {
                c._trigger("selected", b.Event("selected"), {
                    item: a,
                    index: d
                })
            }) : (c.activeMarker.stop(!1).css({
                left: a.position().left + e + "px",
                top: a.position().top + f + "px",
                width: a.outerWidth() + "px",
                height: a.outerHeight() + "px",
                opacity: 1
            }), c._trigger("selected", b.Event("selected"), {
                item: a,
                index: d
            }));
            c._killHoverMarker();
            c.selectedItem = a
        },
        deselect: function () {
            var a = self.activeMarker;
            self.activeMarker = null;
            a.fadeOut(200,
            function () {
                a.remove()
            });
            self.selectedItem = null
        },
        destroy: function () { }
    });
    b.widget("ui.markedNavigation", b.ui.markedSelector, {
        _create: function () {
            b.ui.markedSelector.prototype._create.apply(this, arguments)
        },
        _resolveWidgetClasses: function () {
            return b.ui.markedSelector.prototype._resolveWidgetClasses.apply(this, arguments) + " navigation"
        },
        _resolveMarker: function () {
            return b('<div><div class="left"></div><div class="right"></div></div>')
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.listItemRenderer", b.ui.cloudflareWidget, {
        options: {
            data: {
                label: "I has no data!"
            }
        },
        _create: function () {
            if (this.element.is("li")) this.element.addClass("cf-ui list-item-renderer"),
            this.options.disabled && this.element.addClass("disabled"),
            this.element.data("itemRenderer", this.widgetName),
            this._invalidateStructure(),
            this._invalidateData();
            else return !1
        },
        _invalidateStructure: function () {
            this.element.empty();
            this.element.append('<a><span class="label"></span></a>')
        },
        _invalidateData: function () {
            for (var a in this.options.data) this.element.find("." + a).empty().text(this.options.data[a])
        }
    });
    b.widget("ui.nullItemRenderer", b.ui.listItemRenderer, {
        _create: function () {
            b.ui.listItemRenderer.prototype._create.apply(this, arguments);
            this.element.addClass("null-item-renderer")
        },
        _invalidateStructure: function () {
            this.element.empty();
            this.element.append('<span class="label"></span>')
        }
    });
    b.widget("ui.comboboxItemRenderer", b.ui.listItemRenderer, {
        _create: function () {
            b.ui.listItemRenderer.prototype._create.apply(this, arguments);
            this.element.addClass("combobox-item-renderer")
        },
        _invalidateStructure: function () {
            this.element.empty();
            this.element.append('<a><span class="label"></span></a><div class="details"></div>')
        },
        _invalidateData: function () {
            var a = this.options.data;
            this.element.find(".label").empty().text(a.label);
            null !== a.details && 0 < b("#" + a.details).length && this.element.addClass("has-details").find(".details").html(b("#" + a.details).html())
        }
    });
    b.widget("ui.comboboxCriticalItemRenderer", b.ui.comboboxItemRenderer, {
        _create: function () {
            b.ui.comboboxItemRenderer.prototype._create.apply(this, arguments);
            this.element.addClass("critical")
        }
    });
    b.widget("ui.comboboxDisabledItemRenderer", b.ui.comboboxItemRenderer, {
        _create: function () {
            this.options.disabled = !0;
            b.ui.comboboxItemRenderer.prototype._create.apply(this, arguments)
        }
    });
    b.widget("ui.lookingGlassItemRenderer", b.ui.listItemRenderer, {
        _create: function () {
            b.ui.listItemRenderer.prototype._create.apply(this, arguments);
            this.element.addClass("looking-glass-item-renderer")
        },
        _invalidateStructure: function () {
            this.element.empty();
            this.element.append('<a><span class="label"></span></a><span class="summary"></span>')
        }
    });
    b.widget("ui.actionableListItemRenderer", b.ui.listItemRenderer, {
        options: b.extend({
            buttons: []
        },
        b.ui.listItemRenderer.prototype.options),
        _create: function () {
            b.ui.listItemRenderer.prototype._create.apply(this, arguments);
            this.element.addClass("actionable-item-renderer");
            this._invalidateButtons()
        },
        _invalidateStructure: function () {
            this.element.empty();
            this.buttonContainer = b('<ul class="buttons"></ul>').appendTo(this.element)
        },
        _invalidateButtons: function () {
            var a = this;
            b.each(a.options.buttons,
            function (c, d) {
                a.buttonContainer.append(b('<li class="button ' + d.title + '"><a>' + d.title + "</a></li>").tooltip({
                    text: d.tip,
                    delay: 1E3
                }).bind("click",
                function (b) {
                    b.stopImmediatePropagation();
                    a.triggerAction(d.title, b)
                }))
            })
        },
        triggerAction: function (a, c) {
            a && (c = c ? c : b.Event("itemaction"), this._trigger("itemaction", c, {
                action: a,
                item: this.element,
                data: this.options.data
            }))
        },
        destroy: function () {
            this.buttonContainer.find("li").each(function (a, c) {
                b(c).clearTooltip()
            })
        }
    });
    b.widget("ui.threatListItemRenderer", b.ui.actionableListItemRenderer, {
        options: {
            buttons: [{
                title: "block",
                tip: "Block this visitor and override CloudFlare defaults"
            },
            {
                title: "trust",
                tip: "Trust this visitor and override CloudFlare defaults"
            },
            {
                title: "dismiss",
                tip: "Dismiss this alert"
            }]
        },
        _create: function () {
            b.ui.actionableListItemRenderer.prototype._create.apply(this, arguments);
            this.element.addClass("threat-item-renderer")
        },
        _invalidateStructure: function () {
            b.ui.actionableListItemRenderer.prototype._invalidateStructure.apply(this, arguments);
            this.inner = b("<a></a>").appendTo(this.element);
            this.outer = this.element;
            this.propertySection = b('<div class="splitter properties"></div>').appendTo(this.inner);
            this.priority = b('<div class="group priority"><div class="cf-icon inner priority white"></div></div>').appendTo(this.propertySection).tooltip({
                text: "This is a high priority threat alert"
            });
            this.category = b('<div class="group category label"></div>').appendTo(this.propertySection);
            this.threatScore = b('<div class="group threatScore label"></div>').appendTo(this.propertySection).tooltip({
                text: "The level of threat posed by this visitor"
            });
            this.dateSection = b('<div class="splitter date"></div>').appendTo(this.inner);
            this.date = b('<span class="label date"></span>').appendTo(this.dateSection).tooltip({
                text: "Date of last visit to one of your websites"
            });
            this.idSection = b('<div class="splitter id"></div>').appendTo(this.inner);
            this.idType = b('<span class="strong label id-type"></span>').appendTo(this.idSection);
            this.idValue = b('<span class="label id-value"></span>').appendTo(this.idSection);
            this.countrySection = b('<div class="splitter country"></div>').appendTo(this.inner);
            this.statusSection = b('<div class="splitter status"></div>').appendTo(this.inner);
            this.pathway = b('<div class="group pathway"></div>').appendTo(this.statusSection);
            this.status = b('<span class="strong label status"></span>').appendTo(this.statusSection)
        },
        _invalidateData: function () {
            this.options.data.priority ? this.element.addClass("priority") : this.element.removeClass("priority");
            var a = function (a) {
                "string" == typeof a && (a = a.toUpperCase());
                switch (a) {
                    case "BZ":
                        return {
                            label:
                            "Botnet Zombie",
                            tip: "Visitor exhibits behavior consistent with a machine infected with a virus"
                        };
                    case "RB":
                        return {
                            label:
                            "Rule Breaker",
                            tip: "Visitor broke rules such as crawling too fast or ignoring robots.txt"
                        };
                    case "H":
                        return {
                            label:
                            "Harvester",
                            tip: "Visitor was caught stealing email addresses on other sites"
                        };
                    case "WS":
                        return {
                            label:
                            "Web Spammer",
                            tip: "Visitor was caught posting comment / blog spam on other sites"
                        };
                    case "XA":
                        return {
                            label:
                            "Exploit Attacker",
                            tip: "Visitor was caught attempting to hack other sites"
                        };
                    case "SE":
                        return {
                            label:
                            "Search Engine",
                            tip: null
                        };
                    case "CR":
                        return {
                            label:
                            "Custom Rule",
                            tip: "This rule was created by you and can be edited on the Threat Control page"
                        };
                    default:
                        return {
                            label:
                            "Unidentified threat",
                            tip: "We were unable to retrieve specific information about this threat at this time"
                        }
                }
            }(this.options.data.category);
            this.category.clearTooltip();
            this.category.text(a.label.toUpperCase());
            a.tip && this.category.tooltip({
                text: a.tip,
                width: 350
            });
            this.options.data.threatScore ? (this.threatScore.show(), this.threatScore.text(this.options.data.threatScore)) : this.threatScore.hide();
            this.options.data.date ? this.date.text((new Date(1E3 * this.options.data.date)).toDateString()) : this.date.text(this.options.data.dateString);
            this.idType.text(this.options.data.idFormat.toUpperCase() + ": ");
            this.idValue.empty().clearTooltip();
            a = this.options.data.id;
            switch (this.options.data.idFormat.toLowerCase()) {
                case "country":
                    this.idValue.append('<div class="cf-icon flag ' + this.options.data.id.toLowerCase() + '"></div>');
                    this.idValue.tooltip({
                        text: b.cf.countryHash.unicodeCountry[this.options.data.id.toUpperCase()],
                        offset: 11
                    });
                    break;
                case "ip":
                    this.options.data.hasOwnProperty("grp"),
                    19 < a.length && (a = a.substring(0, 19) + "...");
                case "ip range":
                    this.idValue.text(a),
                    this.options.data.hasOwnProperty("grp") || this.idValue.copyToClipboard({
                        copyText: this.options.data.id
                    })
            }
            this.options.data.country ? (this.countrySection.show(), this.countrySection.empty().append('<div class="cf-icon flag ' + this.options.data.country.toLowerCase() + '"></div>'), this.countrySection.clearTooltip().tooltip({
                text: "Country of origin: " + b.cf.countryHash.unicodeCountry[this.options.data.country.toUpperCase()],
                offset: 11
            })) : this.countrySection.hide();
            this.pathway.empty();
            a = function (a) {
                switch (a) {
                    case 4:
                        return {
                            label:
                            "BLOCKED",
                            tip: "This entity has been blocked by you"
                        };
                    case 3:
                        return {
                            label:
                            "TRUSTED",
                            tip: "This entity has been trusted by you"
                        };
                    case 2:
                        return {
                            label:
                            "LEFT MESSAGE",
                            tip: "Visitor was challenged, passed the CAPTCHA and left you a message"
                        };
                    case 1:
                        return {
                            label:
                            "PASSED CAPTCHA",
                            tip: "Visitor was challenged but passed the CAPTCHA"
                        };
                    case 0:
                        return {
                            label:
                            "CHALLENGED",
                            tip: "Visitor was presented with a CAPTCHA but did not pass it"
                        };
                    case -1: return {
                        label: "NOT CHALLENGED",
                        tip: "Increase your security settings to challenge potential threats like this one"
                    };
                    default:
                        return null
                }
            };
            if (a(this.options.data.pathway)) switch (this.status.text(a(this.options.data.pathway).label.toUpperCase()), this.status.tooltip({
                    text: a(this.options.data.pathway).tip,
                    offset: 10
            }), this.options.data.pathway) {
                case 4:
                    b('<div class="cf-icon list inner shield white"></div>').prependTo(this.pathway).tooltip({
                        text:
                        a(4).tip,
                        offset: 13
                    });
                    break;
                case 3:
                    b('<div class="cf-icon list inner check white"></div>').prependTo(this.pathway).tooltip({
                        text:
                        a(3).tip,
                        offset: 13
                    });
                    break;
                case 2:
                    b('<div class="cf-icon list inner mail white"></div>').prependTo(this.pathway).tooltip({
                        text:
                        'Message: "' + (b.isArray(this.options.data.messages) ? this.options.data.messages[0] : "") + '"',
                        width: 300,
                        offset: 13
                    });
                case 1:
                    b('<div class="cf-icon list inner check white"></div>').prependTo(this.pathway).tooltip({
                        text:
                        "Visitor passed the CAPTCHA",
                        offset: 13
                    });
                case 0:
                    b('<div class="cf-icon list inner shield white"></div>').prependTo(this.pathway).tooltip({
                        text:
                        "Visitor was challenged",
                        offset: 13
                    });
                    break;
                case -1: b('<div class="cf-icon list inner door white"></div>').prependTo(this.pathway).tooltip({
                    text: "Visitor was not challenged",
                    offset: 13
                })
            }
        },
        destroy: function () {
            b.ui.actionableListItemRenderer.prototype.destroy.apply(this, arguments);
            this.inner.find("div").clearTooltip()
        }
    });
    b.widget("ui.customRuleItemRenderer", b.ui.threatListItemRenderer, {
        _create: function () {
            b.extend(this.options, {
                buttons: [{
                    title: "block",
                    tip: "Add this entity to your Block List"
                },
                {
                    title: "unblock",
                    tip: "Remove this entity from your Block List"
                },
                {
                    title: "trust",
                    tip: "Add this entity to your Trust List"
                },
                {
                    title: "untrust",
                    tip: "Remove this entity from your Trust List"
                }]
            });
            this.element.addClass("custom-rule-item-renderer");
            b.ui.threatListItemRenderer.prototype._create.apply(this, arguments);
            this._invalidateData()
        },
        _invalidateData: function () {
            this.options.data.category = "CR";
            switch (this.options.data.grp) {
                case "ctry":
                    this.options.data.idFormat = "Country";
                    break;
                case "ipr":
                    this.options.data.idFormat = "IP Range";
                    break;
                default:
                    this.options.data.idFormat = "IP"
            }
            this.date.clearTooltip().tooltip({
                text: "Date this rule was created"
            });
            this.options.data.id = this.options.data.key;
            this.options.data.dateString = this.options.data.edate;
            b.ui.threatListItemRenderer.prototype._invalidateData.apply(this, arguments);
            "wl" == this.options.data.rule.toLowerCase() ? (this.element.removeClass("blocked"), this.options.data.pathway = 3, this.buttonContainer.children(".unblock, .trust").hide(), this.buttonContainer.children(".block, .untrust").show()) : (this.element.addClass("blocked"), this.options.data.pathway = 4, this.buttonContainer.children(".unblock, .trust").show(), this.buttonContainer.children(".block, .untrust").hide())
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.list", b.ui.cloudflareWidget, {
        options: {
            itemRenderer: "listItemRenderer",
            nullItemRenderer: "nullItemRenderer",
            title: "",
            icon: "",
            dataProvider: [],
            filters: [],
            addItemAnimation: function (a, b) {
                a.show();
                b()
            },
            removeItemAnimation: function (a, b) {
                a.hide();
                b()
            }
        },
        _setOption: function (a, b) {
            this.options[a] = b;
            switch (a) {
                case "itemRenderer":
                    this._invalidateItemRenderer();
                    break;
                case "icon":
                case "title":
                    this._invalidateTitle();
                    break;
                case "dataProvider":
                    this._invalidateDataProvider();
                    break;
                case "filters":
                    this._invalidateFilters()
            }
        },
        _create: function () {
            var a = this;
            if (a.element.is("ul")) a.selectedIndex = -1,
            a.hoverIndex = -1,
            a.unfilteredItemCount = 0,
            a.element.addClass("cf-ui list"),
            a.title = b('<li class="title"><span class="icon"></span><span class="label"></span></li>').addClass(a.options.title.toLowerCase().split(" ").join("-")).appendTo(a.element),
            a.element.bind("blur mouseleave",
            function () {
                a.highlight(-1)
            }),
            a._invalidateTitle(),
            a._invalidateDataProvider();
            else return !1
        },
        _invalidateTitle: function () {
            this.options.title && "" != this.options.title ? (this.title.find("span.label").text(this.options.title), this.title.find("span.icon").addClass(this.options.iconClass)) : this.title.hide()
        },
        _invalidateDataProvider: function () {
            this.empty();
            if (0 < this.options.dataProvider.length) for (var a = 0; a < this.options.dataProvider.length; a++) this.addItem(this.options.dataProvider[a], null, !0, !1);
            else this._invalidateItemRenderer()
        },
        _invalidateFilters: function () {
            var a = this;
            a.unfilteredItemCount = 0;
            a.element.children(a._resolveItemSelector()).each(function (c, d) {
                var e = !0,
                f = b(d);
                b.each(a.options.filters,
                function (a, b) {
                    e = e && b(f[f.data("itemRenderer")]("option", "data"))
                });
                e ? (f.show(), f.removeClass("filtered")) : (f.hide(), f.addClass("filtered"))
            });
            a._trigger("filter", null, {})
        },
        _invalidateItemRenderer: function () {
            var a = this;
            0 < a.options.dataProvider.length ? a.element.children(a._resolveItemSelector()).each(function (c, d) {
                var e = b(d);
                a.addItem(e[e.data("itemRenderer")]("option", "data"), c);
                a.removeItem(e)
            }) : b('<li><span class="label"></span></li>')[a.options.nullItemRenderer]({
                data: {
                    label: "No data available!"
                }
            }).appendTo(a.element)
        },
        _resolveItemSelector: function () {
            return "li.list-item-renderer"
        },
        _resolveItemRenderer: function (a) {
            return a.itemRenderer ? a.itemRenderer : this.options.itemRenderer
        },
        _resolveItemCount: function () {
            return this.element.children(this._resolveItemSelector()).length
        },
        _resolveItemIndex: function (a) {
            return this.element.children(this._resolveItemSelector()).index(a)
        },
        _resolveItem: function (a) {
            return this.element.children(this._resolveItemSelector()).eq(a)
        },
        _nudge: function (a, b) {
            var d = this._resolveItem(b ? this.selectedIndex : this.hoverIndex);
            d.length && d[a](this._resolveItemSelector()).length && (b ? this.select(d[a](this._resolveItemSelector())) : this.highlight(d[a](this._resolveItemSelector())))
        },
        _triggerChange: function () {
            this._trigger("change", b.Event("change"), {})
        },
        _delegateItem: function (a, c) {
            var d = "number" == typeof a ? a : this._resolveItemIndex(a);
            0 > d || d >= this._resolveItemCount() ? (d = -1, b.cf.resolveClientTier() < b.cf.clientTier.three && this.element.children(this._resolveItemSelector()).removeClass(c)) : b.cf.resolveClientTier() < b.cf.clientTier.three && this.element.children(this._resolveItemSelector()).removeClass(c).eq(d).addClass(c);
            return d
        },
        _registerItem: function (a) {
            var b = this;
            a.bind("mouseenter",
            function () {
                b.highlight(a)
            }).bind("click",
            function () {
                a.hasClass("disabled") || b.select(a)
            });
            return a
        },
        addItem: function (a, c, d, e) {
            var f = this,
            g = f._registerItem(b("<li></li>")[f._resolveItemRenderer(a)]({
                data: a,
                itemaction: function (a, b) {
                    f._trigger("itemaction", a, b)
                }
            }));
            g.bind("mousedown",
            function (a) {
                a.preventDefault()
            });
            var h = !0;
            c ? (f.element.children(f._resolveItemSelector()).eq(c).after(g), !1 !== e && f.options.dataProvider.splice(c, 0, a)) : (f.element.append(g), !1 !== e && f.options.dataProvider.push(a));
            b.each(f.options.filters,
            function (a, b) {
                h = h && b(g[g.data("itemRenderer")]("option", "data"))
            });
            g.hide();
            h ? (g.removeClass("filtered"), d ? (g.show(), f._triggerChange()) : f.options.addItemAnimation(g,
            function () {
                f._triggerChange()
            })) : (g.addClass("filtered"), f._triggerChange())
        },
        removeItem: function (a, c) {
            var d = this;
            b.cf.log("Removing item " + a);
            var e = function () {
                var c = "number" == typeof a ? a : d._resolveItemIndex(a),
                e = d._resolveItem(c);
                b.cf.log("Performing remove! # of items: " + e.length);
                e[d.options.itemRenderer]("destroy").remove();
                d.options.dataProvider.splice(c, 1);
                d._triggerChange()
            };
            c ? e() : d.options.removeItemAnimation("number" == typeof a ? d._resolveItem(a) : a, e)
        },
        getItem: function (a) {
            return self._resolveItem(a)
        },
        countFilteredItems: function () {
            return this.element.children(this._resolveItemSelector()).filter(".filtered").length
        },
        countItems: function () {
            return this.element.children(this._resolveItemSelector()).length
        },
        empty: function () {
            var a = this.options.dataProvider ? this.options.dataProvider.length : 0;
            0 != a ? this.element.children(this._resolveItemSelector())[this.options.itemRenderer]("destroy").remove() : this.element.children(this._resolveItemSelector()).remove();
            a != this.options.dataProvider.length && this._triggerChange()
        },
        select: function (a) {
            this.selectedIndex = this._delegateItem(a, "active"); -1 < this.selectedIndex && (a = "number" == typeof a ? this._resolveItem(a) : a, this._trigger("selected", b.Event("selected"), {
                item: a[a.data("itemRenderer")]("option", "data"),
                renderer: a,
                index: this._resolveItemIndex(a)
            }))
        },
        highlight: function (a) {
            this.hoverIndex = this._delegateItem(a, "hover")
        },
        next: function (a) {
            this._nudge("next", a)
        },
        previous: function (a) {
            this._nudge("prev", a)
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.combobox", b.ui.cloudflareWidget, {
        options: {
            width: null,
            height: "23px",
            fontSize: null,
            comboOptions: null,
            value: null,
            hideFirstValue: !1,
            async: !1,
            customComboOptionClass: null
        },
        _setOption: function (a, b) {
            this.options[a] = b;
            this.invalidateOption(a)
        },
        _create: function () {
            var a = this;
            if (a.element.is("select")) {
                if (b.cf.isMobile || b.browser.msie && 9 <= parseInt(b.browser.version.substr(0, 2), 10)) return a.revealNative(),
                a._isNativeMode = !0,
                !1;
                a.element.addClass("ui-helper-hidden-accessible");
                a.elementHasFocus = !1;
                a.combo = b('<div class="cf-ui combobox"></div>').insertAfter(a.element);
                a.title = b('<div class="title"></div>').appendTo(a.combo);
                a.arrow = b('<div class="arrow"><div></div></div>').appendTo(a.combo);
                a.comboOptions = b('<div class="cf-ui combobox comboOptions"></div>');
                a.element.bind("focus",
                function () {
                    a.combo.addClass("hover");
                    a.elementHasFocus = !0
                }).bind("blur",
                function () {
                    a.combo.removeClass("hover");
                    a.close();
                    a.elementHasFocus = !1
                }).bind("change",
                function () {
                    a._setOption("value", a.element.val())
                });
                a.combo.bind("mouseenter",
                function () {
                    a.combo.addClass("hover")
                }).bind("mouseleave",
                function () {
                    a.elementHasFocus || a.combo.removeClass("hover")
                }).bind("click",
                function () {
                    a.combo.hasClass("active") ? a.close() : a.combo.hasClass("disabled") || a.open()
                });
                a.resolveHasFocusProxy = function (b) {
                    a._resolveHasFocus(b.target)
                };
                a.options.async ? setTimeout(b.proxy(a._onAttach, a), 0) : a._onAttach();
                return !0
            }
            a.destroy();
            return !1
        },
        _isFixedWidth: function () {
            return this.options.width
        },
        _onAttach: function () {
            this._invalidateValue();
            this._initComboOptions();
            this._invalidateComboOptions();
            this._invalidateDimensions()
        },
        _initComboOptions: function () {
            var a = this;
            a.comboOptions.appendTo("body").addClass(a.options.customComboOptionsClass).hide();
            a.optionList = b("<ul></ul>").appendTo(a.comboOptions).list({
                itemRenderer: "comboboxItemRenderer",
                selected: function (c, d) {
                    a.element.val() != d.item.value && (b.cf.log("Setting value: " + d.item.value), a.element.val(d.item.value), a.element.change(), a._trigger("selected", b.Event("selected"), {
                        item: d.item
                    }))
                }
            })
        },
        revealNative: function () {
            this.element.removeClass("ui-helper-hidden-accessible")
        },
        _resolveHasFocus: function (a) {
            b.contains(this.combo.get(0), a) || this.combo.get(0) == a || this.close()
        },
        _resolveComboOptionsLayoutAlgo: function () {
            var a = this.comboOptionsHeight,
            c = b(window).height(),
            d = b(window).scrollTop(),
            e = this.element.offset().top,
            f = b.cf.normalizeDigitalMeasurement(this.combo.outerHeight()),
            g = c + d,
            c = e > g,
            h = e + f < d,
            f = Math.max(0, g - (e + f)),
            d = Math.max(0, e - d),
            e = "below";
            return e = c ? "bottom" : h ? "top" : f > a ? "below" : d > a ? "above" : "bottom"
        },
        _resolveComboOptionsLayout: function () {
            var a = this._resolveComboOptionsLayoutAlgo(),
            c = this.comboOptionsHeight,
            d = b(window).scrollTop() + b(window).height(),
            e = 0.1 * b(window).height(),
            f,
            g,
            h;
            switch (a) {
                case "below":
                    f = "type-below";
                    g = {
                        top: b.cf.normalizeCSSMeasurement(this.combo.offset().top + this.combo.outerHeight())
                    };
                    break;
                case "above":
                    f = "type-above";
                    g = {
                        top: b.cf.normalizeCSSMeasurement(this.combo.offset().top - c)
                    };
                    break;
                case "bottom":
                    f = "type-full";
                    a = b(window).height() - 2 * e;
                    h = Math.min(c, a);
                    g = {
                        top: b.cf.normalizeCSSMeasurement(d - e - h)
                    };
                    break;
                case "top":
                    f = "type-full",
                    a = b(window).height - 2 * e,
                    h = Math.min(c, a),
                    g = {
                        top: b.cf.normalizeCSSMeasurement(b(window).scrollTop() + e)
                    }
            }
            return {
                typeClassName: f,
                comboOptions: {
                    css: b.extend({
                        height: h || "auto"
                    },
                    g)
                }
            }
        },
        _invalidateValue: function () {
            var a;
            this.options.value = this.element.val();
            this._isNativeMode || (a = 0 <= this.element.get(0).selectedIndex ? this.element.get(0).selectedIndex : 0, this.title.text(b(this.element.get(0).options[a]).text()))
        },
        _invalidateWidth: function () {
            this._invalidateDimensions()
        },
        _invalidateHeight: function () {
            this._invalidateDimensions()
        },
        _invalidateListDimensions: function () { },
        _getWidth: function () {
            var a;
            if (!this._isNativeMode) return this.options.width ? a = b.cf.normalizeCSSMeasurement(this.options.width) : (a = 0, this.comboOptions.css({
                width: "auto"
            }), this.comboOptions.show(), a = Math.max(this.comboOptions.width(), a), this.comboOptions.hide(), a += 2.5 * b.cf.normalizeDigitalMeasurement(this.options.height)),
            a
        },
        _invalidateDimensions: function () {
            this._invalidateComboDimensions();
            this._invalidateComboOptionsDimensions()
        },
        _invalidateComboDimensions: function () {
            var a = this._getWidth(),
            c = this.options.fontSize ? b.cf.normalizeCSSMeasurement(this.options.fontSize) : b.cf.normalizeDigitalMeasurement(this.options.height) / 2 + "px";
            this._isNativeMode || (this.combo.css({
                width: b.cf.normalizeCSSMeasurement(a),
                height: b.cf.normalizeCSSMeasurement(this.options.height)
            }), this.title.css({
                lineHeight: b.cf.normalizeCSSMeasurement(this.options.height),
                fontSize: c,
                paddingLeft: b.cf.normalizeDigitalMeasurement(this.options.height) / 3 + "px",
                paddingRight: b.cf.normalizeDigitalMeasurement(this.options.height) + b.cf.normalizeDigitalMeasurement(this.options.height) / 3 + "px"
            }), this.arrow.css({
                width: b.cf.normalizeDigitalMeasurement(this.options.height) + 3 + "px"
            }))
        },
        _invalidateComboOptionsDimensions: function () {
            this._getWidth();
            this._isNativeMode || this.comboOptions.css({
                width: this.combo.css("width")
            })
        },
        _invalidateComboOptions: function () {
            var a = this,
            c = a.options.comboOptions ? a.options.comboOptions : a.element.children("option");
            a._isNativeMode || (a.optionList.list("empty"), b.each(c,
            function (c, e) {
                if (!(a.options.hideFirstValue && 0 == c)) {
                    var f;
                    f = "string" == typeof e ? "comboboxItemRenderer" : b(e).attr("itemrenderer") ? b(e).attr("itemrenderer") : b(e).is(":disabled") ? "comboboxDisabledItemRenderer" : "comboboxItemRenderer";
                    a.optionList.list("addItem", {
                        label: "string" == typeof e ? e : b(e).attr("label") ? b(e).attr("label") : b.trim(b(e).text()),
                        value: "string" == typeof e ? e : b(e).attr("value") ? b(e).attr("value") : b.trim(b(e).text()),
                        details: b(e).attr("details") || null,
                        itemRenderer: f
                    })
                }
            }), a.comboOptionsHeight = a.comboOptions.height())
        },
        open: function () {
            var a, c = b("html").hasClass("boxshadow") ? 1 : 0;
            this._invalidateComboOptions();
            a = this._resolveComboOptionsLayout();
            this.combo.addClass("active " + a.typeClassName);
            this.comboOptions.css(b.extend({
                left: b.cf.normalizeCSSMeasurement(this.combo.offset().left + c)
            },
            a.comboOptions.css)).addClass(a.typeClassName).show();
            b(document).bind("click", this.resolveHasFocusProxy)
        },
        close: function () {
            this.combo.removeClass("active type-below type-above type-full");
            this.comboOptions.removeClass("type-below type-above type-full").hide();
            b(document).unbind("click", this.resolveHasFocusProxy)
        },
        disable: function () {
            this.element.attr("disabled", "disabled");
            this._isNativeMode || this.combo.addClass("disabled")
        },
        enable: function () {
            this.element.attr("disabled", !1);
            this._isNativeMode || this.combo.removeClass("disabled")
        },
        refresh: function () {
            this._invalidateValue();
            this._invalidateComboOptions();
            this._invalidateDimensions()
        },
        debugDrawLayoutOutline: function () {
            b('<div style="position: absolute;"></div>').appendTo("#FixedContent").css({
                top: 0
            })
        },
        debugDrawComboOutline: function () { }
    })
})(jQuery); (function (b) {
    b.widget("ui.multiSelect", b.ui.cloudflareWidget, {
        options: {
            removeLabel: "(remove)",
            listItemClass: "asmListItemCustom"
        },
        _setOption: function (a, b) {
            this.options[a] = b;
            this._refresh()
        },
        _create: function () {
            var a = b(this.element),
            c;
            a.addClass("cf-ui cf-multiselect").asmSelect(this.options).bind("change",
            function () {
                b(this).val();
                var a = c.data("combobox").optionList.list("option", "dataProvider"),
                e = c.find("option[disabled]").map(function (a, c) {
                    return b(c).val()
                });
                b.each(a,
                function (a, c) {
                    c.itemRenderer = -1 != b.inArray(c.value, e) ? "comboboxDisabledItemRenderer" : "comboboxItemRenderer"
                });
                c.data("combobox").optionList.list("option", "dataProvider", a)
            });
            c = a.parent().find("select:not([multiple]).asmSelect");
            c.combobox()
        },
        disableOption: function (a) {
            var c = b(this.element);
            c.find(a).attr({
                disabled: !0,
                selected: !1
            });
            c.change()
        },
        enableOption: function (a) {
            var c = b(this.element);
            c.find(a).attr({
                disabled: !1
            });
            c.change()
        },
        enableAllOptions: function () {
            this.enableOption("option")
        },
        _refresh: function () {
            this._destroy();
            this._create()
        },
        _destroy: function () { },
        destroy: function () {
            this._destroy();
            b.Widget.prototype.destroy.apply(this, arguments)
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.lookingGlass", {
        options: {
            source: null,
            itemRenderer: "lookingGlassItemRenderer",
            delay: 500,
            maxHeight: null,
            displayEmptySources: !0,
            preserveOrder: !1
        },
        _setOption: function (a, b) {
            this.options[a] = b;
            switch (a) {
                case "source":
                    this._invalidateSource()
            }
        },
        _create: function () {
            var a = this;
            if (a.element.is('input[type="text"]')) a.document = a.element.get(0).ownerDocument,
            a.keydownTimeout = -1,
            a.menuHasMouse = !1,
            a.inputHasMouse = !1,
            a.handleResultProxy = function () {
                a._handleResult.apply(a, arguments)
            },
            a.element.addClass("cf-ui looking-glass"),
            a.element.bind("keyup",
            function (c) {
                if ("" != a.element.val()) switch (c.keyCode) {
                    case b.ui.keyCode.ENTER:
                        clearTimeout(a.keydownTimeout);
                        a.search(a.element.val());
                        break;
                    case b.ui.keyCode.UP:
                        break;
                    case b.ui.keyCode.DOWN:
                        break;
                    case b.ui.keyCode.ESCAPE:
                        a.close();
                        break;
                    case b.ui.keyCode.COMMAND_LEFT:
                    case b.ui.keyCode.COMMAND_RIGHT:
                    case b.ui.keyCode.LEFT:
                    case b.ui.keyCode.RIGHT:
                    case b.ui.keyCode.CONTROL:
                    case b.ui.keyCode.ALT:
                    case b.ui.keyCode.SHIFT:
                        break;
                    default:
                        clearTimeout(a.keydownTimeout),
                        a.keydownTimeout = setTimeout(function () {
                            a.search(a.element.val())
                        },
                        a.options.delay)
                } else a.close()
            }).bind("focus",
            function () {
                "" != a.element.val() && !a.menuHasMouse && a.search(a.element.val())
            }).bind("blur",
            function (b) {
                a.menuHasMouse ? (b.preventDefault(), a.element.focus()) : a.close()
            }),
            a.menu = b('<ul class="cf-ui looking-glass menu"></ul>').hide().appendTo("body").bind("mouseenter",
            function () {
                a.menuHasMouse = !0
            }).bind("mouseleave",
            function () {
                a.menuHasMouse = !1
            }),
            a.close(),
            a._invalidateSource();
            else return !1
        },
        _invalidateSource: function () {
            var a = this;
            a.newQuery = !0;
            a.menu.empty();
            a.source = function (c, d) {
                b.each(a.options.source,
                function (a, b) {
                    b.data.q = c;
                    b.query(d)
                })
            };
            a.options.preserveOrder && (a.sourceIndex = {},
            b.each(a.options.source,
            function (b, d) {
                a.sourceIndex[d.name] = b
            }))
        },
        _resolveMenuOffset: function () {
            return {
                top: this.element.offset().top + this.element.outerHeight(),
                left: this.element.offset().left
            }
        },
        _resolveMenuSize: function () {
            var a = 0,
            c = this.options.maxHeight ? this.options.maxHeight : Math.max(b.cf.windowProperties().height - 300, 200);
            this.menu.find("ul.list").each(function (c, e) {
                a += b(e).height()
            });
            return {
                width: this.element.innerWidth(),
                height: a > c ? c : 0
            }
        },
        _handleResult: function (a) {
            var c = this,
            d = !0,
            e;
            c.menu.find("ul.list").each(function (c, g) {
                if (b(g).list("option", "title") == a.name) return e = b(g).list("option", "dataProvider", a.results).parent(),
                d = !1
            });
            d && (e = b("<ul></ul>").list({
                selected: function (a, b) {
                    c._trigger("selected", a, {
                        item: b.item
                    })
                },
                dataProvider: a.results,
                title: a.name,
                itemRenderer: c.options.itemRenderer
            }).appendTo(b("<li></li>")).parent(), c.options.preserveOrder && c.sourceIndex[a.name] < c.menu.children().length ? e.insertBefore(c.menu.children().eq(c.sourceIndex[a.name])) : e.appendTo(c.menu));
            0 >= a.results.length && e && !c.options.displayEmptySources ? e.hide() : e.show();
            "" != c.element.val() ? c.open() : c.close()
        },
        search: function (a) {
            a && a.length && this.source(a, this.handleResultProxy)
        },
        open: function () {
            var a = this._resolveMenuOffset(),
            b = this._resolveMenuSize();
            this.menu.css({
                top: a.top + "px",
                left: a.left + "px",
                width: b.width + "px",
                height: b.height ? b.height + "px" : "auto"
            }).show()
        },
        close: function () {
            this.menuHasMouse = !1;
            this.menu.hide()
        }
    })
})(jQuery); (function (b) {
    b(function () {
        b.widget("ui.progressBar", b.ui.cloudflareWidget, {
            options: {
                title: "Loading",
                start: 0,
                timer: !1
            },
            _setOption: function (a, b) {
                "timer" == a && this._timer(b);
                this.options[a] = b
            },
            _create: function () {
                b(this.element).is("a") ? (this.component = b(this.element), this.component.addClass("cf-ui progress-bar"), this.background = b('<div class="background"></div>').appendTo(this.component), this.bar = b('<div class="bar"></div>').appendTo(this.component), this.title = b("<span></span>").appendTo(this.component).text(this.options.title), this.progress(this.options.start), this.options.timer && this._timer(this.options.timer)) : this.destroy()
            },
            _timer: function (a) {
                var b = this;
                b.bar.animate({
                    width: "100%"
                },
                1E3 * a, "linear",
                function () {
                    b._trigger("complete")
                })
            },
            progress: function (a) {
                a = Math.min(Math.abs(a), 1);
                this.bar.css({
                    width: Math.floor(100 * a) + "%"
                });
                1 == a && this._trigger("complete")
            },
            destroy: function () {
                this.title && (this.title.remove(), this.title = null);
                this.bar && (this.bar.remove(), this.bar = null);
                this.background && (this.background.remove(), this.background = null);
                this.component.removeClass("cf-ui progress-bar")
            }
        })
    })
})(jQuery, window); (function (b) {
    b(function () {
        b.widget("ui.bitField", b.ui.cloudflareWidget, {
            options: {
                title: "Select options",
                listFormat: !1,
                bits: []
            },
            _setOption: function (a, b) {
                this.options[a] = b;
                this.invalidate()
            },
            _create: function () {
                b(this.element).is("div") && (this.component = b(this.element), this.component.addClass("cf-ui bit-field"), this.options.listFormat && this.component.addClass("list"), this.title = b("<h1></h1>").appendTo(this.component).text(this.options.title), this.bitList = b("<ul></ul>").appendTo(this.component), this.enabled = !0, this.invalidate())
            },
            enable: function () {
                this.enabled = !0
            },
            disable: function () {
                this.enabled = !1
            },
            setBit: function (a, b) {
                var d = this.options.bits[a],
                e = d.value;
                d.value = b;
                e !== b && this._trigger("change", null, {
                    value: this.value()
                });
                this.refresh(a)
            },
            getBit: function (a) {
                return this.options.bits[a].value
            },
            setValue: function (a) {
                b.each(this.options.bits,
                function (b, d) {
                    d.value = !!(a & Math.pow(2, b))
                })
            },
            value: function () {
                var a = 0;
                b.each(this.options.bits,
                function (b, d) {
                    !0 === d.value && (a |= Math.pow(2, b))
                });
                return a
            },
            refresh: function (a) {
                var c = this,
                d = c.options.bits,
                e = c.bitList,
                f = function (a) {
                    var b = e.children().eq(a);
                    c.getBit(a) ? b.addClass("set") : b.removeClass("set")
                };
                "undefined" !== typeof a ? f(a) : b.each(d,
                function (a) {
                    f(a)
                })
            },
            invalidate: function () {
                var a = this,
                c = a.options.bits,
                d = a.bitList;
                d.empty();
                b.each(c,
                function (c, f) {
                    var g = b("<li></li>").addClass(f.value ? "set" : "").appendTo(d),
                    g = b('<a href="javascript:void(0);"></a>').append(b("<span>" + f.label + "</span>")).appendTo(g);
                    g.append(b('<div class="icon"><div></div></div>'));
                    g.bind("click",
                    function () {
                        a.enabled && a.setBit(c, !(a.value() & Math.pow(2, c)))
                    })
                });
                a.refresh()
            }
        })
    })
})(jQuery, window); (function (b) {
    b(function () {
        b.widget("ui.keyCodeCapture", b.ui.cloudflareWidget, {
            options: {
                maxLength: 10,
                defaultValue: []
            },
            _setOption: function () {
                this.options[key] = value;
                this.invalidate()
            },
            _create: function () {
                var a = this;
                b(a.element).is("div") && (a.component = b(a.element), a.component.addClass("cf-ui key-code"), a.recordButton = b('<a href="javascript:void(0);"><span>Start recording</span><div class="icon"></div></a>').appendTo(a.component), b("<span>Recorded key code below</span>").appendTo(a.component), a.captureList = b("<ul></ul>").appendTo(a.component), a.recording = !1, a.lastRecording = a.options.defaultValue, a.capturedKeys = [], a.specialUp = {
                    37: "Left",
                    38: "Up",
                    39: "Right",
                    40: "Down"
                },
                a.specialPress = {
                    13: "Enter",
                    32: "Space"
                },
                a.options.defaultValue && a.populate(a.options.defaultValue), b("body").bind("keypress",
                function (b) {
                    a.recording && b.preventDefault();
                    b = b.which || b.keyCode;
                    a.specialUp[b] || a.captureKey(b, a.specialPress[b] || String.fromCharCode(b))
                }).bind("keyup",
                function (b) {
                    var d = b.which || b.keyCode;
                    a.specialUp[d] && !a.specialPress[d] && (a.recording && b.preventDefault(), a.captureKey(d, a.specialUp[d]))
                }), a.recordButton.bind("click",
                function () {
                    a.recording ? (a.stop(), a.save()) : (a.reset(), a.record())
                }))
            },
            populate: function (a) {
                var c = this;
                c.reset();
                c.record();
                b.each(a,
                function (a, b) {
                    c.captureKey(b, c.specialUp[b] || c.specialPress[b] || String.fromCharCode(b))
                });
                c.stop()
            },
            record: function () {
                this.recording || (this.recording = !0, this.recordButton.addClass("active"), this.recordButton.children("span").eq(0).text("Click to stop"))
            },
            stop: function () {
                this.recording && (this.recording = !1, this.recordButton.removeClass("active"), this.recordButton.children("span").eq(0).text("Start recording"))
            },
            reset: function () {
                this.recording || (this.stop(), this.recording = !1, this.lastRecording = this.capturedKeys, this.capturedKeys = [], this.captureList.empty())
            },
            save: function () {
                this.capturedKeys.length ? this.recording || (this.stop(), this.recording = !1, this.lastRecording = this.capturedKeys, this._trigger("commit", null, {
                    value: this.capturedKeys
                })) : this.populate(this.lastRecording)
            },
            captureKey: function (a, c) {
                c = 1 === c.length ? c.toUpperCase() : c;
                this.recording && this.capturedKeys.length < this.options.maxLength && (97 <= a ? this.capturedKeys.push(a - 32) : this.capturedKeys.push(a), this.captureList.append(b("<li>" + (c || a) + "</li>")))
            },
            enable: function () {
                this.enabled = !0
            },
            disable: function () {
                this.enabled = !1
            }
        })
    })
})(jQuery); (function (b) {
    b.widget("ui.recordRow", b.ui.cloudflareWidget, {
        _render: b.noop,
        _hasTabCapture: function () {
            return !0
        },
        _attachWidgets: b.noop,
        _attachHandlers: b.noop,
        _onHiddenKeyPress: b.noop,
        _onActiveBlur: b.noop,
        _getActiveBlurDelay: function () {
            return 400
        },
        onSelect: b.noop,
        onDeselect: b.noop,
        onResize: b.noop,
        _create: function () {
            var a = this.element,
            c = b("<div></div>");
            this.widgetElement = a;
            a.replaceWith(c);
            this.widgetElement.addClass("record-row").append('<div class="row form compact"></div><div class="row alerts"><div class="alert panel"><div class="controls"><a class="collapse-alert" href="javascript:void(0);">collapse</a></div><div class="msg"></div><div class="arrow"></div></div></div>');
            this.dataRow = this.widgetElement.children(".row").first();
            this.alertsRow = this.widgetElement.children(".row.alerts");
            this.msgEl = this.alertsRow.children(".panel");
            this._hasTabCapture() && this._drawTabCapture();
            this._render();
            this.options.inFragment || (c.replaceWith(this.widgetElement), this.onAttach());
            return this.widgetElement
        },
        onAttach: function () {
            var a = this;
            a.isAttached = !0;
            a._attachRecordRowHandlers();
            setTimeout(function () {
                a.widgetElement.hasClass("alerts-active") && a._positionAlertArrow();
                a.sizeOverlays()
            },
            0);
            a._attachWidgets();
            a._attachHandlers();
            a.enable()
        },
        drawAlert: function (a, b, d) {
            var e = this.widgetElement,
            f = e.find(".cell.alert-icon");
            e.addClass("alerts-active");
            f.attr("class", "cell alert-icon " + a);
            this.alertsRow.attr("class", "row alerts " + a).data("alert-target-cell", d || this._getDefaultAlertTarget());
            this.alertsRow.find(".msg").html(b);
            this._postProcessAlert();
            this.isAttached && (this._positionAlertArrow(), this.sizeOverlays())
        },
        _positionAlertArrow: function () {
            var a = this.alertsRow.data("alert-target-cell"),
            b = this.alertsRow.find("div.arrow"),
            d = Math.round(1.414 * b.width()),
            e;
            a && !(1 > a.length) && (e = a.css("marginLeft"), e = parseInt(e.slice(0, -2), 10), a = e + a.width() / 2 - d / 2 - 1, b.css("left", a + "px"))
        },
        _postProcessAlert: function () {
            this.alertsRow.find("a").attr("tabindex", "1").attr("href",
            function (a, c) {
                return /act=/.test(c) ? c + "&atok=" + b.cf.atok() : c
            })
        },
        _getDefaultAlertTarget: function () {
            return this.dataRow.find(".cell").first()
        },
        clearAlert: function () {
            var a = this.widgetElement;
            a.removeClass("alerts-active alerts-expanded");
            a.find(".cell.alert-icon").attr("class", "cell alert-icon");
            a.find(".row.alerts").attr("class", "row alerts");
            this.sizeOverlays()
        },
        showAlert: function () {
            this.widgetElement.hasClass("alerts-active") && (this.widgetElement.addClass("alerts-expanded"), this.sizeOverlays())
        },
        hideAlert: function () {
            this.widgetElement.removeClass("alerts-expanded");
            this.sizeOverlays()
        },
        _drawTabCapture: function () {
            this.tabCapture = b('<input type="text" class="hidden-field proxy-input" tabindex="1"/>').prependTo(this.widgetElement)
        },
        sizeOverlays: function () {
            var a = this.widgetElement,
            b = function () {
                a.find(".cf-row-overlay").css({
                    width: a.width(),
                    height: a.height()
                })
            };
            a.width() + a.height() ? b() : setTimeout(b, 13);
            if (this._sizeInitDone) this.onResize();
            else this._sizeInitDone = !0
        },
        _attachRecordRowHandlers: function () {
            var a = this,
            c = a.widgetElement,
            d = c.find(".proxy-input");
            a.widgetElement.find(".collapse-alert").click(b.proxy(a.hideAlert, a));
            a.widgetElement.find(".expand-alert").click(b.proxy(a.showAlert, a));
            c.delegate("input, select, textarea, a", "blur",
            function () {
                setTimeout(function () {
                    c.find(":focus").length || (c.hasClass("mousedown") ? d.focus() : (c.removeClass("selected"), a.onDeselect()))
                },
                13)
            }).delegate("input, select, textarea, a", "focus",
            function () {
                c.addClass("selected");
                a.onSelect()
            }).delegate("input:not(.hidden-field), select, textarea, a", "blur",
            function () {
                a._beginActiveBlurCountdown()
            }).delegate("input:not(.hidden-field), select, textarea, a", "focus",
            function () {
                a._clearActiveBlurCountdown()
            });
            d.bind("keyup",
            function (b) {
                var d = b.keyCode || b.which;
                switch (d) {
                    case 38:
                    case 74:
                        c.prev().find(".proxy-input").focus();
                        break;
                    case 40:
                    case 75:
                        c.next().find(".proxy-input").focus();
                        break;
                    default:
                        a._onHiddenKeyPress(b, d)
                }
            })
        },
        _beginActiveBlurCountdown: function () {
            this.activeBlurCountdown && clearTimeout(this.activeBlurCountdown);
            this.activeBlurCountdown = setTimeout(b.proxy(this._onActiveBlur, this), this._getActiveBlurDelay())
        },
        _clearActiveBlurCountdown: function () {
            clearTimeout(this.activeBlurCountdown)
        },
        widget: function () {
            return this.widgetElement
        },
        enable: function () {
            this.enabled = !0
        },
        disable: function () {
            this.enabled = !1
        },
        _cancel: function () {
            this.options.complete(!1);
            this.destroy()
        },
        _done: function () {
            this.options.complete(!0);
            this.destroy()
        },
        destroy: function () {
            b.Widget.prototype.destroy.apply(this, arguments);
            this.widgetElement.remove()
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.gallery", b.ui.cloudflareWidget, {
        options: {
            random: !1,
            rotateInterval: 5E3,
            width: "600px",
            height: "400px"
        },
        _create: function () {
            var a = this,
            c = b(a.element);
            if (c.is("ul")) {
                var d = b("<div></div>").insertBefore(c).append(c),
                e = b("<div></div>").insertBefore(c).append(c),
                f = b('<a href="javascript:void(0);"></a>').appendTo(e).addClass("left"),
                g = b('<a href="javascript:void(0);"></a>').appendTo(e).addClass("right");
                a.rightButton = g;
                d.addClass("cf-ui gallery");
                d.css({
                    width: a.options.width,
                    height: a.options.height
                });
                a.itemCount = c.children("li").length;
                a.selectedIndex = a.options.random ? Math.floor(Math.random() * a.itemCount) : 0;
                e.css({
                    height: d.height() - 50 + "px"
                });
                f.bind("click",
                function () {
                    a.selectedIndex = 0 > a.selectedIndex - 1 ? a.itemCount - 1 : a.selectedIndex - 1;
                    a.refresh()
                });
                g.bind("click",
                function () {
                    a.selectedIndex = a.selectedIndex + 1 == a.itemCount ? 0 : a.selectedIndex + 1;
                    a.refresh()
                });
                a.refresh()
            }
        },
        goTo: function (a) {
            var b = this;
            b.selectedIndex !== a && (b.selectedIndex = b.selectedIndex < a ? b.selectedIndex + 1 == b.itemCount ? 0 : b.selectedIndex + 1 : 0 > b.selectedIndex - 1 ? b.itemCount - 1 : b.selectedIndex - 1, b.refresh(), setTimeout(function () {
                b.goTo(a)
            },
            150))
        },
        refresh: function () {
            var a = b(this.element),
            c = this.selectedIndex,
            d = 0 > c - 1 ? this.itemCount - 1 : c - 1,
            e = 0 > d - 1 ? this.itemCount - 1 : d - 1,
            f = c + 1 == this.itemCount ? 0 : c + 1,
            g = f + 1 == this.itemCount ? 0 : f + 1,
            h = 2 < this.itemCount,
            j = 4 < this.itemCount;
            a.children("li").each(function (a, l) {
                var k = b(l).attr("class", "");
                a == e && j && k.addClass("prepre");
                a == d && h && k.addClass("pre");
                a == c && k.addClass("current");
                a == f && h && k.addClass("post");
                a == g && j && k.addClass("postpost")
            });
            this.rotate()
        },
        rotate: function () {
            var a = this;
            a.options.rotateInterval && (clearTimeout(a.rotateTimer), a.rotateTimer = setTimeout(function () {
                a.rightButton.click()
            },
            a.options.rotateInterval))
        }
    })
})(jQuery); (function (b) {
    b.widget("ui.popupMenu", b.ui.cloudflareWidget, {
        options: {
            label: null
        },
        _create: function () {
            if (this.element.is("ul")) return this.element.addClass("cf-ui popup-menu"),
            this.element.attr("role", "menu").attr("aria-hidden", "true"),
            this.widgetElement = b('<div class="cf-ui popup-menu-container"></div>'),
            this.medallion = b('<div class="cf-ui popup-menu-medallion" aria-haspopup="true"></div>').appendTo(this.widgetElement),
            this.options.label && this.medallion.append('<span class="label">' + this.options.label + "</span>"),
            this.element.replaceWith(this.widgetElement).appendTo(this.widgetElement),
            0 == this.element.children().length && this.widgetElement.addClass("empty"),
            this._attachEventHandlers(),
            !0;
            this.destroy();
            return !1
        },
        _attachEventHandlers: function () {
            var a = this;
            a.element.delegate("a", "click",
            function (c) {
                c = b(c.target);
                a._trigger("selected", b.Event("selected"), {
                    target: c
                });
                a.medallion.click();
                return !1
            });
            a.element.find("li a").bind("mouseenter",
            function (a) {
                b(a.target).closest("li").addClass("hover")
            }).bind("mouseleave",
            function (a) {
                b(a.target).closest("li").removeClass("hover")
            });
            a.medallion.click(function () {
                !a.element.hasClass("active") && (!a.widgetElement.hasClass("disabled") && !a.widgetElement.hasClass("empty")) && (a.element.addClass("clicked active"), a.element.attr("aria-hidden", "false"), setTimeout(function () {
                    a.element.removeClass("clicked")
                },
                    200))
            });
            b("body").click(function () {
                a.element.hasClass("clicked") || (a.element.removeClass("active"), a.element.attr("aria-hidden", "true"))
            })
        }
    })
})(jQuery);